我有基本枚举
enum Fruit
{
case APPLE;
case ORANGE;
case BANANA;
}
字符串
和一些使用该枚举类型的函数:
function eatFruit (Fruit $fruit)
{
// do stuff
}
型
和未知内容的变量
$fruit = $_POST['fruit']; // user choosed "MILK"
if (?????) { // how to check if it's fruit?
eatFruit($fruit); // this should not be executed
}
型
我在documentation中找不到检查枚举是否包含特定大小写的简单方法。
这是可能的支持枚举一样,
enum Fruit
{
case APPLE = 'APPLE';
case ORANGE = 'ORANGE';
case BANANA = 'BANANA';
}
Fruit::from('');
Fruit::tryFrom('');
型
这将工作,但from
不存在于非支持的枚举形式我的第一个例子。
Fatal error: Uncaught Error: Call to undefined method Fruit::from()
型
3条答案
按热度按时间dnph8jn41#
你可以使用静态方法
cases()
来实现。这会返回枚举中所有值的数组。这些值有一个“name”属性,它是一个你可以检查的字符串表示(支持的枚举也有一个“value”属性,它包含你在枚举中定义的字符串值)。因此,示例实现可能是这样的:
字符串
带有示例数据的工作版本:https://3v4l.org/ObD3s
如果你想在不同的枚举中更频繁地这样做,你可以为此编写一个助手函数:
型
具有相同样本数据的示例:https://3v4l.org/bL8Wa
vu8f3i0k2#
字符串
我们在每个case上使用匿名调用过滤
Fruit::cases
,在那里我们检查,如果case名称相同,就像POST中提供的那样。然后我们从filtered中获得current
值,如果它是false(在case中没有找到名称),我们将APPLE分配为默认值(或者您可以保留false或null,如您所愿)。请注意,它是区分大小写的。7lrncoxx3#
仅用途:
第一个月