(PECL spl_types >= 0.1.0)
SplEnum gives the ability to emulate and create enumeration objects natively in PHP.
SplEnum::__default
Example #1 SplEnum usage example
<?php
class Month extends SplEnum {
    const __default = self::January;
    
    const January = 1;
    const February = 2;
    const March = 3;
    const April = 4;
    const May = 5;
    const June = 6;
    const July = 7;
    const August = 8;
    const September = 9;
    const October = 10;
    const November = 11;
    const December = 12;
}
echo new Month(Month::June) . PHP_EOL;
try {
    new Month(13);
} catch (UnexpectedValueException $uve) {
    echo $uve->getMessage() . PHP_EOL;
}
?>
The above example will output:
6 Value not a const in enum Month