Объекты и ссылки
Объекты в PHP передаются и присваиваются по ссылке
Объекты и ссылки
Ссылка в php - это псевдоним (алиас), который позволяет присвоить двум переменным одинаковое значение
В php объектная переменная больше не содержит сам объект как значение, такая переменная содержит только идентификатор объекта, который позволяет найти конкретный объект при обращении к нему.
Объект передаваемый как аргумент функции или возвращается или присваивается другой переменной, то эти разные переменные не являются псевдонимами, они содержат копию идентификатора, который указывает на один и тот же объект
class A
{
public $foo = 1;
}
$a = new A;
var_dump($a);
echo "<br>";
$b = $a; #Содержат один и тот же идентификатор одного объекта. // ($a) = ($b) =
var_dump($b);
echo "<br>";
echo $b->foo . "<br>"; #1
$b->foo = 2;
echo $a->foo . "<br>"; #2
$c = new A;
var_dump($c);
echo "<br>";
$d = &$c; #с и d это ссылки на один объект // ($c,$d) =
var_dump($d);
echo "<br>";
echo $c->foo . "<br>"; #1
echo $d->foo . "<br>"; #1
$d->foo = 2;
echo $c->foo . "<br>"; #2
$e = new A;
var_dump($e);
echo "<br>";
#В следующем примере obj и e содержать одинаковый идентификатор одного объекта
function foo($obj)
{
var_dump($obj);
echo "<br>";
$obj->foo = 2;
}
foo($e);
echo $e->foo;
object(A)#1 (1) { ["foo"]=> int(1) }
object(A)#1 (1) { ["foo"]=> int(1) }
1
2
object(A)#2 (1) { ["foo"]=> int(1) }
object(A)#2 (1) { ["foo"]=> int(1) }
1
1
2
object(A)#3 (1) { ["foo"]=> int(1) }
object(A)#3 (1) { ["foo"]=> int(1) }
2
Источники
Последнее изменение: 20.11.2024 04:55
Связанные темы
Оператор разрешения видимости в php
Позднее статическое связывание
Методы создания экземпляра класса в php
Автоматическая загрузка классов
Наследование с помощью extends в php
Конструкторы и деструкторы в php
Добавлять комментарии могут только авторизованные пользователи