Cytat(dr_bonzo @ 8.11.2006, 09:03:30 )

Nie probowalem ale dopiero od 5.2 mozna ponoc zmieniac zwrocona tablice przez __get(), a sproboj usunac '&' sprzed metody.
Już tego próbowałem zanim wysłałem posta na forum.
Wcześniej znalazłem też notkę o tym bugu, o którym mówisz i byłem mocno zaskoczony.
Poza tym ja nie dostaję komunikatu "Fatal error: Cannot use array returned from foo::__get
('bar') in write context", który jest zaqcytowany w noce o tym bugu.
U mnie przypisanie jest wykonywane tak jakby poprawnie. Tylko jakby nie widział, że to jest referencja.
Ha!
Zrobilem jeszcze testy.
mam klase jak ostatnio tylko lekko zmodyfikowana.
bardziej odzwierciedla przypadek z mojego rzeczywstego skryptu bo to tutaj chyba lezy bug.
<?php
class test {
private $zmienne = array();
public function & __get($nazwa) {
return $this->zmienne[$nazwa];
}
public function __set($nazwa, $wartosc) {
$this->zmienne[$nazwa] = $wartosc;
}
}
?>
I teraz:
<?php
$test1 = new test;
$test1->dane['cos1'] = 'cos1';
$test1->dane['cos2'] = 'cos2';
$test2 = new test;
$test2->dane['przepisane'] = $test1->dane;
?>
Teraz jesli zrobie:
<?php
echo($test2->dane['przepisane']['cos1']); ?>
To na ekranie jest drukowane:
Array
Dodam, ze na php 5.1.x nie ma problemów.
?>
Z dalszych testów wynika, że następujący kod:
<?php
$test1 = new test;
$test1->dane['cos1'] = 'cos1';
$test1->dane['cos2'] = 'cos2';
$test2 = new test;
$zmienna['przepisane'] = $test1->dane;
$test2->dane = $zmienna;
?>
Zachowuje się poprawnie.