[ Ilija Studen @ 21.04.2004. 09:10 ] @
Kada funkcija vraca objekat sta dobijam? Referencu? Ako ne kako da kazem f-ji da vrati bas referencu? |
[ Ilija Studen @ 21.04.2004. 09:10 ] @
[ -zombie- @ 21.04.2004. 11:40 ] @
u php5 se svi objekti prenose baš kao reference (slično kao u javi). svaka takva funkcija u stvari vraća referencu.
implicitno kopiranje objekta se nikada ne dešava. ako pak nasuprot želiš da iskopiraš objekat (i dobiješ drugu zasebnu instancu sa istim svojstvima i osobinama), moraš explicitno da pozoveš __clone() metod (opet slično javi ;). [ Gojko Vujovic @ 21.04.2004. 17:45 ] @
Je l podržava serijalizaciju i kako se tada ponaša? Na primer na mreži objekata (jedni sadrže reference ka drugima i tako celo stablo).
[ -zombie- @ 22.04.2004. 04:13 ] @
// prvo da se ispravim/dopunim. izgleda da je od bete4 za kloniranje ubačena nova ključna reč: $newObj = clone $oldObj;
naravno da podržava serializaciju, i naravno da podržava reference u serializovanoj mreži objekata. u prvim alfama petice je valjda bilo problema sa ciklusima (rekurzivnim referenciranjem), sada i to radi.. našao sam samo jedan problem sa referenciranjem na početni serijalizovani objekat (u beti3, nisam još stigao da se igram za RC). naime, kada imamo rekurziju posle već prvog nivoa, npr $x->a = $x; to radi kako se i očekuje. ali kada imamo recimo ovakav kod: Code: class Alpha { var $a; } class Beta { var $b; } $x = new Alpha(); $x->a = new Beta(); $x->a->b = $x; $y = unserialize(serialize($x)); var_dump($x, $y); za sve koji razumeju problematiku, rezultat nije baš očekivan: Code: object(alpha)#1 (1) { ["a"]=> object(beta)#2 (1) { ["b"]=> object(alpha)#1 (1) { ["a"]=> object(beta)#2 (1) { ["b"]=> *RECURSION* } } } } object(alpha)#3 (1) { ["a"]=> &object(beta)#4 (1) { ["b"]=> object(alpha)#5 (1) { ["a"]=> &object(beta)#4 (1) { ["b"]=> object(alpha)#5 (1) { ["a"]=> *RECURSION* } } } } } po referencama objekata (ID brojevi posle imena klasa, npr #3), vidi se da $y->a->b nije (rekurzivna) referenca na $y, već je $y->a->b->a referenca na $y->a.. Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.
|