Этот вопрос проверяет понимание базового механизма передачи аргументов в PHP функции и различий между передачей по значению и по ссылке.
В PHP по умолчанию аргументы в функцию передаются по значению. Это означает, что функция получает копию значения переменной, и изменения этой копии внутри функции не влияют на исходную переменную. Однако для объектов передается не сам объект, а ссылка на него, поэтому изменения свойств объекта внутри функции будут видны снаружи. Массивы и скалярные типы (числа, строки) передаются по значению, если явно не указано иное.
Создается копия значения переменной
Изменения внутри функции не влияют на исходную переменную
Применяется для скалярных типов (int, float, string, bool) и массивов
Пример:
php
function modifyValue($x) {
$x = 100;
}
$number = 5;
modifyValue($number);
echo $number; // Выведет 5 (не изменилось)Объекты передаются по ссылке (начиная с PHP 5)
Функция получает доступ к тому же объекту в памяти
Изменения свойств объекта сохраняются
Пример:
php
class User {
public $name;
}
function changeName($user) {
$user->name = "John";
}
$user = new User();
$user->name = "Alice";
changeName($user);
echo $user->name; // Выведет "John"Для скалярных значений:
Передача по значению безопасна
Исходные данные защищены от случайного изменения
Для объектов:
Эффективно по памяти (не создаются копии)
Позволяет модифицировать состояние объекта
Вывод: По умолчанию PHP использует передачу по значению для скаляров и массивов, и передачу по ссылке для объектов. Это обеспечивает баланс между безопасностью и производительностью.