Abstract value and enum objects
class IntValue extends AbstractValue
{
publicstaticfunctionisValid($value)
{
returnis_int($value);
}
}
$x = newIntValue(10); // okprint$x->getValue(); // 10$y = newIntValue(10);
var_dump($x->equal($y)); // true$z = newIntValue('20'); // throws \UnexpectedValueExceptionAll class defined constants are valid values, and magic method with same constant name can be called to instantiate Enum with that value.
class Gender extends AbstractEnum
{
constMALE = 'male';
constFEMALE = 'female';
privatestatic$titles = [
self::MALE => 'gender.male',
self::FEMALE => 'gender.female',
];
publicfunctiongetTitle()
{
returnself::$titles[$this->getValue()];
}
}
var_dump(Gender::all()); // ['male' => Gender() => 'female' => Gender() ]var_dump(Gender::values()); // [ 0 => 'male', 1 => 'female' ]$m = Gender::MALE();
print$m->getValue(); // maleprint$m->getTitle(); // gender.malevar_dump(Gender::isValid('male')); // truevar_dump(Gender::isValid('something')); // false
