Ответ
По умолчанию аргументы передаются по значению. Это означает, что функция работает с копией переданного значения. Изменения этой копии внутри функции не затрагивают оригинальную переменную.
Пример передачи по значению:
function increment($number) {
$number++;
echo "Внутри функции: $numbern"; // Выведет 6
}
$originalValue = 5;
increment($originalValue);
echo "Снаружи: $originalValuen"; // Выведет 5 (оригинал не изменился)
Для передачи по ссылке необходимо явно указать амперсанд (&) перед параметром в объявлении функции:
function incrementByReference(&$number) {
$number++;
}
$value = 5;
incrementByReference($value);
echo $value; // Выведет 6
Особый случай — объекты: Начиная с PHP 5, объекты передаются по ссылке неявно. Технически это называется "передача дескриптора объекта по значению", но на практике поведение аналогично передаче по ссылке: изменения свойств объекта внутри функции видны снаружи.
class MyClass {
public $property = 1;
}
function modifyObject($obj) {
$obj->property = 2; // Изменяется свойство того же объекта
}
$instance = new MyClass();
modifyObject($instance);
echo $instance->property; // Выведет 2