Если передать объект в функцию, будут ли видны изменения снаружи?

«Если передать объект в функцию, будут ли видны изменения снаружи?» — вопрос из категории PHP Core, который задают на 24% собеседований PHP Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

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

Пример:

class User {
    public $name;
}

function changeName(User $user) {
    $user->name = 'Alice';
}

$user = new User();
$user->name = 'Bob';
changeName($user);
echo $user->name; // Выведет 'Alice'

Важное исключение: Если внутри функции переменной $user присвоить новый объект, это не затронет исходный объект снаружи, так как меняется только локальная ссылка.

function replaceObject(User $user) {
    // Это создаст новый объект, не влияющий на внешнюю переменную
    $user = new User();
    $user->name = 'Eve';
}