在函数的参数中,是否可以指定一些枚举值?
例如,而不是这样:
public function getValuesFromType(string $type) { /*...*/ }
我想只允许一些特定的值-类似于下面的伪代码:
public function getValuesFromType('a'||'b' $type) { /*...*/ }
我尝试创建一个包含值的Enum对象,并在类型中添加Enum。但是,当运行函数getValuesFromType('a')
时,出现一个错误:argument 1 must be of type MyTypeEnum, string given
...
public function getValuesFromType(MyTypeEnum $type)
如何限制可以作为参数传递给此方法的值?
1条答案
按热度按时间4dbbbstv1#
我是Enum的超级粉丝。
让我们使用下面的枚举作为示例:
如果你知道你将拥有MyTypeEnum的示例,你可以将它用作typehint:
所以你可以使用MyTypeEnum示例作为参数:
但是如果你不知道你的参数是什么,那么输入提示为
string
,并在MyTypeEnum上使用from()
或tryFrom()
静态函数。from()
将抛出异常,如果值不匹配任何情况,tryFrom()
将简单地返回null
但还有第三种方法,我喜欢用途:
如果你在枚举中添加了一个函数,你可以在一个示例上调用它:
使用方法:
如果需要联合类型,则需要单个
|
字符。public function getValuesFromType(string|array $type)
但是你不能使用
'a' | 'b'
或MyTypeEnum::APPLE | MyTypeEnum::BANANA
。类型必须是简单的(如string $type
)或复杂的示例(如MyTypeEnum $type
)。