Как передается массив в функцию? По значению или по ссылке?

Ответ

По значению, но с оптимизацией copy-on-write:

function process(array $arr) {
    // $arr - "копия", но реально данные не скопированы (COW)
    $arr[] = 'new'; // ЗДЕСЬ происходит реальное копирование
}

$data = [1, 2, 3];
process($data);
var_dump($data); // [1, 2, 3] - не изменился

Для передачи по ссылке:

function addItem(array &$arr) {
    $arr[] = 'new'; // изменяет оригинал
}

COW делает передачу по значению эффективной для чтения - копия создается только при модификации.

🧠Квиз 🏆Лидеры 🎯Собесед. 📖Вопросы 📚База зн.