php 中的通用枚举类型

Ben*_*owe 5 php enums types

如何指定参数类型以采用任何枚举值?

类似的东西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)

此外,最好将支持和不支持的枚举或额外支持的类型分开;例如,作为字符串支持的枚举。

IMS*_*SoP 4

所有枚举都实现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)