Ответ
В PHP аргументы, включая массивы, по умолчанию передаются по значению (copy-on-write). Это означает, что при вызове функции создается копия переменной, но физическое копирование данных в памяти происходит только в момент попытки их изменения (write).
Если массив внутри функции только читается, механизм copy-on-write предотвращает лишнее копирование, и передача происходит практически без накладных расходов.
Пример:
function calculateTotal(array $items): float
{
$total = 0.0;
// Массив $items только читается
foreach ($items as $item) {
$total += $item['price'] * $item['quantity'];
}
return $total;
}
$cart = [
['name' => 'Book', 'price' => 10, 'quantity' => 2],
['name' => 'Pen', 'price' => 1, 'quantity' => 5],
];
$sum = calculateTotal($cart); // Массив передан по значению, но копирования не происходит
Если же нужно явно работать с исходным массивом и изменять его, параметр нужно объявить с передачей по ссылке, используя амперсанд (&).