【发布时间】:2023-02-02 00:19:58
【问题描述】:
鉴于:
enum TestEnum: string
{
case CASE_1 = "first case";
case CASE_2 = "Second case";
}
这应该返回true:
TestEnum::class instanceof \BackedEnum
但我得到false
我从这个 post 尝试了以下操作(它无法在 Laravel Tinker REPL 中运行,但作为脚本运行?):
interface TestEnumInterface extends \BackedEnum
{
public function foo(): string;
}
enum TestEnum: string implements TestEnumInterface
{
case CASE_1 = 'case 1';
case CASE_2 = 'case 2';
public function foo(): string
{
return 'bar';
}
}
TestEnum::class instanceof \BackedEnum //false
TestEnum::class instanceof \TestEnumInterface //false
我错过了什么? 运行 PHP v8.1.13
谢谢
更新: 实际上,根据 SomeOne1 的回复,以下返回 true:
TestEnum::CASE_1 instanceof \BackedEnum
然后我会尝试更具体。
我必须测试一个变量 $list,它可以是许多不同的枚举(比如 $list = TestEnum::class 或 $list = AnotherEnum::class),或者一个 Laravel 集合,或者一个数组。
//if ($list instanceof \BackedEnum) {
if (isset($isEnum)) { // I want to get rid of this
// do stuff
}
else if ($list instanceof \Illuminate\Database\Eloquent\Collection || $list instanceof \Illuminate\Support\Collection) {
// do stuff differently
}
else if (is_array($list)) {
// do stuff differently
}
else {
var_dump($list);
dd('invalid list');
}
那如何测试这个变量是不是枚举类型呢?
【问题讨论】: