我希望这样的事情能成功
$bar = match (foo()) {
[] => throw Exception,
[, ] => throw Exception,
[$x] => $x,
};
在这里,我测试foo()
是否只给出一个元素的数组,如果是,将该元素存储在$bar
中,否则抛出异常。
当然,我可以用if
语句来完成这一点,但我希望类似于这种语法的东西也能工作。
这两种情况都不起作用,因为它在[, ]
和Cannot use empty array elements in arrays
上失败,在$x
和Undefined variable
上失败-这两种情况都是预期的。
我的动机来自函数式编程,类似的东西也可以工作。有没有一种方法可以写一些类似于我上面的代码的东西?
1条答案
按热度按时间x9ybnkn61#
我能想到的最接近的方法是将条件更改为使用
count()
,以便if匹配元素的数量。这是笨拙的,而且必须在检查中有任务,这也使它不那么有吸引力。
正如在对该问题的评论中所提到的,
不,模式匹配在PHP中是不可能的。
和
具体地说,我认为这是最后一次涉及模式匹配的RFC