提问人:Jesse 提问时间:10/18/2022 更新时间:10/18/2022 访问量:93
在 PHP 中可变地将字符串类型转换为枚举
Variably typecasting strings to Enums in PHP
问:
假设我有两个后备枚举:
enum Colors: string
{
case Blue = "blue";
case Red = "red";
}
enum Fruits: string
{
case Apple = "apple";
case Pear = "pear";
}
在我实际的 Yii2 实现中,我想将变量对象属性类型转换为属性类型。在数据库中,我将值存储为字符串,例如“blue”和“apple”,我想将其转换为枚举。在我的自定义所谓的“Yii2 Behavior”的变量初始化中,我传递了多个参数,比如,告诉行为哪个枚举要解析某些属性。此时,行为还不知道任何实际值。[color => Colors::class, fruit => Fruit::class]
在“行为”中,函数以 和 结尾,其中例如 和(这是 的结果)。我希望这个函数返回。$value
$type
$value === "blue"
$type === "Namespace\Colors"
Colors::class
enum Namespace\Colors::Blue
我试过了
if($type instanceof \BackedEnum) {
return $type::from($value);
}
这显然失败了,因为$type只是一个字符串。
所以我试过了
if((new ($type)) instanceof \BackedEnum) {
return $type::from($value);
}
失败。Cannot instantiate enum 'Namespace\Colors'
我被困在这个上,有人知道如何解决这种情况吗?我可以以不同的方式传递或处理什么,以可变地将字符串类型转换为枚举?多
答:
2赞
shingo
10/18/2022
#1
从代码来看,因为是一个字符串,你不能对字符串调用方法,你需要一些函数来运行它。$type
call_user_func
call_user_func([$type, 'from'], $value);
评论