PHP SPL_Types

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.