PHP: <?php class link { public $link; } $var = 1024; $obj = new link(); $obj -> link = &$var; print_r($obj); file_put_contents('link.obj', serialize($obj)); ?> Код (Text): link Object ( [link] => 1024 ) PHP: <?php class link { public $link; } $obj = unserialize(file_get_contents('link.obj')); print_r($obj); ?> Код (Text): link Object ( [link] => 1024 ) (это разные скрипты) Всвязи с этим вопрос - копируется ли на самом деле по ссылке значение переменной, или есть ли смысл использовать ссылки для экономии памяти? Или значение копируется только при сериализации?
"&$var" для экономии памяти совершенно не стоит использовать. Оно не является источником экономии памяти.
[vs], в любом случае. Если ты сделаешь $a = $b;, то $b будет использовать тот же слот памяти, что и $a, пока ты не решишь его поменять. При использовании ж ссылки может быть с точностью до наоборот при определенных условиях. Я по поводу этого, вроде, на хабре статью читал. Поищи, может найдешь.
А чего там читать, в офф. документации уже давно написано, это является фишкой PHP5. При присвоении переменной другой переменной, или при передаче данных в функцию, данные не копируются, а создаются ссылки на эти данные. Если мы не пытаемся модифицировать данные, то они так и остаются ссылками. Как только вы пытаетесь что-то обновить в переменной (скажем в массиве какой-то ключ), то она копируется и производится обновление данных уже в нынешнем экземпляре. Ну а объекты всегда идут ссылкой и если вам нужно копию уже созданного объекта - нужно явно использовать clone. Народ, пора бы перечитать начальную часть мануала всем кто этого не делал за последние пол года, т.е. справочник по языку, там очень много что поменялось и добавилось.