php Разница между передачей объекта по ссылке и без (ссылка на ссылку, "ссылка по значению")

Можно запустить и почувствовать разницу

<?php

class A {
    public function __construct(
        public int $a
            ) {
    }
}

class B {
    public function __construct(
        public int $a
            ) {
    }
}

$a = new A(123);

function tst1($obj) {
    $obj = new B(333);
}

function tst2(&$obj) {
    $obj = new B(333);
}

tst1($a);
print_r($a);
tst2($a);
print_r($a);

-- дело в том что:

  • в качестве аргумента в функцию всегда передается ссылка на объект (в php)
  • в первом случае мы передаем эту ссылку по значению (т.е. фактически создается ее копия)
  • во втором случае мы работаем все с той же ссылкой

Key Words for FKN + antitotal forum (CS VSU):