/ Forside / Teknologi / Udvikling / PHP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
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

Søg
Reklame
Statistik
Spørgsmål : 177501
Tips : 31968
Nyheder : 719565
Indlæg : 6408522
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste