Objects and references

Оновлено: 11.05.2023

Одним з ключових моментів ООП PHP, який часто згадується, є те, що "об'єкти за замовчуванням передаються за посиланнями". Це не зовсім вірно. Цей розділ виправляє цю загальну думку за допомогою декількох прикладів.

Посилання в PHP - це псевдонім, який дозволяє двом різним змінним записувати одне й те саме значення. У PHP об'єктна змінна не містить самого об'єкта як значення. Вона містить лише ідентифікатор об'єкта, який дозволяє аксесорам об'єкта знаходити реальний об'єкт. Коли об'єкт передається аргументом, повертається або присвоюється іншій змінній, різні змінні не є псевдонімами: вони містять копію ідентифікатора, який вказує на той самий об'єкт.

Приклад #1 Посилання та об'єкти

<?php
class A {
    public $foo = 1;
}  

$a = new A;
$b = $a;     // $a and $b are copies of the same identifier
             // ($a) = ($b) = <id>
$b->foo = 2;
echo $a->foo."\n";


$c = new A;
$d = &$c;    // $c and $d are references
             // ($c,$d) = <id>

$d->foo = 2;
echo $c->foo."\n";


$e = new A;

function foo($obj) {
    // ($obj) = ($e) = <id>
    $obj->foo = 2;
}

foo($e);
echo $e->foo."\n";

?>