Поведение PHP Reference в VARIABLES и CLASSES (которые формируются по ссылке) - они разные или одинаковые? - PullRequest
0 голосов
/ 05 октября 2009

В PHP ссылочные переменные изменяются как при изменении 1, так и при другом.

Новые классы формируются неявными ссылками, но изменение расширения не изменяет родителя.

Это дизайн PHP или это разные "ссылки"?

Ответы [ 2 ]

1 голос
/ 05 октября 2009

Вы путаете подклассы (расширения) со ссылками.

Это расширение, которое вы описали:

class ParentClass{ };
class ChildClass extends ParentClass { };

$parent = new ParentClass;
$child = new ChildClass;

$parent->setName('Dad');
$child->setName('Daughter');

echo $parent->name;
// Dad

Это, собственно, то, что вы хотели описать?

Передача переменных / классов по ссылке - это совершенно другой разговор, который не связан с идеей создания подкласса / расширения класса. Это работает больше так.

$parent = new ParentClass;
$child = new ChildClass;

$childRef = $child; // $childRef isn't a copy, it's a reference to $child.
$childRef->setName('Daughter');

echo $child->name;
// Daughter
// Notice that it's the same as if you had called setName( ) on $child itself;
0 голосов
/ 05 октября 2009

Ссылки в PHP - странная конструкция. $a =& $b; делает $a ссылкой на $b. Это означает, что всякий раз, когда значение $b изменяется, $a будет отражать это изменение. Или, иначе говоря, $a всегда будет иметь то же значение, что и $b.

В PHP 4 объекты будут неявно клонированы при их назначении. Например. если $b является объектом, код $a = $b создаст новый объект, который является копией $b, и присвоит ему $a. Это скорее проблема, так как вы обычно хотите ссылочную семантику на объектах. Чтобы обойти это, вы должны были использовать ссылки при работе с объектами. Начиная с PHP 5 это изменилось, поэтому сегодня очень мало случаев (если таковые имеются), где вы должны использовать ссылки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...