如何指定参数类型以采用任何枚举值?
类似的东西function processEnum(enum $value)是理想的,但似乎什么都不存在?
enum Numbers: int {
case FIRST = 1;
case SECOND = 2;
}
enum Foo: string {
case BAR = 'bar';
}
function printEnum($enumValue) {
echo $enumValue->value;
}
printEnum(Numbers::FIRST); // 1
printEnum(Foo::BAR); // 'bar'
printEnum('fail'); // I want to reject this!
Run Code Online (Sandbox Code Playgroud)
此外,最好将支持和不支持的枚举或额外支持的类型分开;例如,作为字符串支持的枚举。
所有枚举都实现该UnitEnum接口,并且支持的枚举(具有类型和->value属性的枚举)也实现该BackedEnum接口。您可以为这些编写类型约束:
enum Numbers: int {
case FIRST = 1;
case SECOND = 2;
}
enum Foo: string {
case BAR = 'bar';
}
enum Something {
case WHATEVER;
}
function doSomething(UnitEnum $enumValue) {
echo "blah\n";
}
function printEnum(BackedEnum $enumValue) {
echo $enumValue->value, "\n";
}
doSomething(Numbers::FIRST); // blah
doSomething(Foo::BAR); // blah
doSomething(Something::WHATEVER); // blah
doSomething('fail'); // TypeError
printEnum(Numbers::FIRST); // 1
printEnum(Foo::BAR); // 'bar'
printEnum(Something::WHATEVER); // TypeError
printEnum('fail'); // TypeError
Run Code Online (Sandbox Code Playgroud)