Что выведет код 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 ошибок.

Термины по теме