|
| Reference til objekt i PHP4 Fra : Frederik Sunne |
Dato : 18-05-06 16:29 |
|
Hej NG,
Jeg sniger mig altid uden om OOP i PHP4 fordi jeg synes
det er besværligt. Anyways sidder med kodestumpen (simplificeret):
while ($conn->GetNextRow()) {
$event =& new event();
$event->setDato (strtotime($conn->oRow['start_dato']));
$events[]= $event;
}
Og når jeg traverserer dette array, er alle pladser i arrayet
fyldt med referencer til det sidst oprettet objekt, som altså
er det samme. Hvad gør jeg for at hvert objekt rent faktisk er
et unikt objekt med hvert sit plads i arrayet?
Mvh,
Frederik
| |
Bent Stigsen (19-05-2006)
| Kommentar Fra : Bent Stigsen |
Dato : 19-05-06 03:45 |
|
Frederik Sunne wrote:
> Hej NG,
>
> Jeg sniger mig altid uden om OOP i PHP4 fordi jeg synes
> det er besværligt. Anyways sidder med kodestumpen (simplificeret):
> while ($conn->GetNextRow()) {
> $event =& new event();
> $event->setDato (strtotime($conn->oRow['start_dato']));
> $events[]= $event;
> }
>
> Og når jeg traverserer dette array, er alle pladser i arrayet
> fyldt med referencer til det sidst oprettet objekt, som altså
> er det samme. Hvad gør jeg for at hvert objekt rent faktisk er
> et unikt objekt med hvert sit plads i arrayet?
Kan ikke lige se at din kodestump skulle gøre det du beskriver.
"$event =& new event();" giver dig ganske vist en reference, men med
"$events[]= $event;" bliver objektet kopieret, så dit array burde være fyldt
med selvstændige objekter.
Prøv med "debug_zval_dump($events);". Check at det virkelig er referencer du
har i arrayet.
/Bent
| |
Frederik Sunne (19-05-2006)
| Kommentar Fra : Frederik Sunne |
Dato : 19-05-06 11:34 |
|
Bent Stigsen wrote:
> Prøv med "debug_zval_dump($events);". Check at det virkelig er referencer du
> har i arrayet.
Det giver:
NULL refcount(1),
Hvilket vel underbygger min teori?
/Frederik
| |
Bent Stigsen (19-05-2006)
| Kommentar Fra : Bent Stigsen |
Dato : 19-05-06 14:48 |
|
Frederik Sunne wrote:
> Bent Stigsen wrote:
>
>> Prøv med "debug_zval_dump($events);". Check at det virkelig er referencer
>> du har i arrayet.
>
> Det giver:
>
> NULL refcount(1),
>
> Hvilket vel underbygger min teori?
Kan jeg ikke lige sige. "$events" har måske været ude af skop, for den burde
give en hel del mere. Du må lige checke stedet hvor du har lagt kaldet ind.
Du kan prøve med eksemplet her, for at se noget i retning af hvad du kan
forvente, hvis din formodning er rigtig.
<?php
$a = array();
$b->c = 1;
$a[] =& $b; // ref. til $b
$a[] =& $b; // ref. til $b
debug_zval_dump($a);
?>
Output:
-----------
array(2) refcount(2){
[0]=>
&object(stdClass)#1 (1) refcount(3){
["c"]=>
long(1) refcount(1)
}
[1]=>
&object(stdClass)#1 (1) refcount(3){
["c"]=>
long(1) refcount(1)
}
}
------------
* &-tegnet foran object angiver at det er en reference.
* refcount(3) er 2 referencer i arrayet, plus $b udenfor.
/Bent
| |
Frederik Sunne (20-05-2006)
| Kommentar Fra : Frederik Sunne |
Dato : 20-05-06 08:14 |
|
Hej Stig,
Jeg fandt ud af det. Jeg programmerede OO, som jeg
kender det fra Java og C++, men det virkede ikke med
PHP4's ganske skumle OO, som bare må være et hack over en
række associative arrays. Så efter at havde bandet lidt
fandt jeg ud af det. Men tak for indsatsen!
Og ja, jeg skal absolut opgradere til PHP5!
Mvh,
Frederik
| |
Frederik Sunne (20-05-2006)
| Kommentar Fra : Frederik Sunne |
Dato : 20-05-06 08:14 |
|
Undskyld, det er jo Bent og ikke Stig :)
/Frederik
| |
|
|