function addTen(int $n): void {
$n += 10; // меняет только локальную копию
}
function addTenRef(int &$n): void {
$n += 10; // меняет оригинал
}
$x = 5;
addTen($x); // $x = 5
addTenRef($x); // $x = 15
Объекты в PHP передаются по handle (указатель на объект), а не по значению и не по ссылке. Изменение свойств объекта внутри функции видно снаружи. Но $obj = new OtherClass() — не видно (заменяет локальный handle).
Редко нужно в современном коде. Лучше возвращать новое значение из функции, а не мутировать аргумент. Оправдано для sort()-подобных функций или больших структур для избежания копирования.