Что выведет код Middle PHP 8.x: enum, readonly, match обновлено
enum: from, tryFrom и cases
Вопрос
Что выведет скрипт (PHP 8.3)? По строке на каждый вывод.
<?php
enum Status: string {
case New = 'new';
case Paid = 'paid';
public function label(): string {
return match ($this) { self::New => 'Новый', self::Paid => 'Оплачен' };
}
}
echo Status::from('paid')->label(), "\n";
var_dump(Status::tryFrom('lost'));
echo count(Status::cases()), ' ', Status::New->name, ' ', Status::New->value, "\n";
var_dump(Status::from('new') === Status::New);
try {
Status::from('lost');
} catch (ValueError $e) {
echo 'ValueError', "\n";
}
Попробуйте сами
Напишите, что выведет код: каждый вывод с новой строки.
Показать ответ и разбор
Коротко
Код выведет: Оплачен, NULL, 2 New new, bool(true), ValueError. from находит вариант по значению и вызывает его метод. tryFrom для неизвестного значения возвращает NULL.
Что выведет
Оплачен
NULL
2 New new
bool(true)
ValueError
Разбор
from находит вариант по значению и вызывает его метод. tryFrom для неизвестного значения возвращает NULL. У перечисления два варианта, у варианта есть name и value. Варианты это синглтоны, поэтому === истинно. from с неизвестным значением бросает ValueError.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.