Что выведет код Middle PHP 8.x: enum, readonly, match обновлено
readonly и вложенные объекты
Вопрос
Что выведет скрипт (PHP 8.3)? По строке на каждый вывод.
<?php
final class Money {
public function __construct(
public readonly int $amount,
public readonly ArrayObject $tags,
) {}
}
$m = new Money(100, new ArrayObject(['a']));
$m->tags[] = 'b';
echo count($m->tags), "\n";
try {
$m->amount = 200;
} catch (Error $e) {
echo $e->getMessage(), "\n";
}
echo $m->amount, "\n";
Попробуйте сами
Напишите, что выведет код: каждый вывод с новой строки.
Показать ответ и разбор
Коротко
Код выведет: 2, Cannot modify readonly property Money::$amount, 100. readonly защищает только само свойство: присвоить ему другой объект нельзя, но менять внутреннее состояние объекта ArrayObject можно: 2 элемента.
Что выведет
2
Cannot modify readonly property Money::$amount
100
Разбор
readonly защищает только само свойство: присвоить ему другой объект нельзя, но менять внутреннее состояние объекта ArrayObject можно: 2 элемента. Запись в amount бросает Error с сообщением Cannot modify readonly property Money::$amount.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.