Ao usar extensão experimental spl_types para php, visto que é uma documentação experimental muito pobre. Se você precisar de um Enumerador, certifique-se de inserir o método _constructor em sua classe e estrito como verdadeiro.
class EncoderLevelEnum extends SplEnum {
const __default = self::FLOOR;
const FLOOR = '1A';
const CEIL = '2B';
const ROUND = '3C';
public function __construct($initial_value, $strict = true)
{
parent::__construct($initial_value, $strict);
}
}
$enum = new EncoderLevelEnum(EncoderLevelEnum::FLOOR);
$fail = new EncoderLevelEnum(1,false);
O que acontecerá se você colocar o valor $ incorreto é UnexpectedValueException não é lançada corretamente. O que eu testei é se estrito é falso e você passa os valores de 1 a 3 classe nunca lança a exceção.