Что выведет код Middle Массивы изнутри спрашивают часто обновлено
Массивы по значению, объекты по дескриптору
Вопрос
Что выведет скрипт (PHP 8.3)? По строке на каждый вывод.
<?php
function addItem(array $list, object $box): void {
$list[] = 'new';
$box->items[] = 'new';
}
$list = ['a'];
$box = new stdClass();
$box->items = ['a'];
addItem($list, $box);
echo count($list), ' ', count($box->items), "\n";
$copy = $box;
$copy->items = [];
echo count($box->items), "\n";
Попробуйте сами
Напишите, что выведет код: каждый вывод с новой строки.
Показать ответ и разбор
Коротко
Код выведет: 1 2, 0. Массив передаётся по значению: функция изменила свою копию, у вызывающего остался 1 элемент.
Что выведет
1 2
0
Разбор
Массив передаётся по значению: функция изменила свою копию, у вызывающего остался 1 элемент. Объект передаётся как дескриптор, и функция меняет тот же объект: 2. Присваивание $copy = $box тоже копирует дескриптор, поэтому очистка $copy->items видна через $box: 0. Для копии объекта нужен clone.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.