Ответ
Механизм передачи определяет, работает ли функция с копией данных или с оригиналом.
Передача по значению — значение переменной копируется. Изменения внутри функции не затрагивают оригинальную переменную.
function incrementByValue($num) {
$num += 10;
return $num;
}
$original = 5;
$result = incrementByValue($original);
echo $original; // 5 (не изменилась)
echo $result; // 15
Передача по ссылке — в функцию передается ссылка на оригинальную переменную (с помощью &). Изменения внутри функции влияют на оригинал.
function incrementByReference(&$num) {
$num += 10;
}
$original = 5;
incrementByReference($original);
echo $original; // 15 (изменилась напрямую)
Важные особенности PHP:
- Объекты передаются по ссылке на объект по умолчанию (начиная с PHP 5). Это означает, что копируется лишь указатель (хэндл) на объект, а не сам объект.
- Массивы и скалярные типы (int, string, bool и т.д.) передаются по значению.
- Оптимизация: Передача больших массивов по ссылке может сэкономить память, так как не создается полная копия. Однако с появлением механизма copy-on-write в PHP эта разница стала менее критичной для многих сценариев.