有没有可能在PHP中将match语句与数组解构结合起来,以实现函数式编程中的模式匹配?

tzdcorbm  于 2023-09-29  发布在  PHP
关注(0)|答案(1)|浏览(101)

我希望这样的事情能成功

$bar = match (foo()) {
    [] => throw Exception,
    [, ] => throw Exception,
    [$x] => $x,
};

在这里,我测试foo()是否只给出一个元素的数组,如果是,将该元素存储在$bar中,否则抛出异常。
当然,我可以用if语句来完成这一点,但我希望类似于这种语法的东西也能工作。
这两种情况都不起作用,因为它在[, ]Cannot use empty array elements in arrays上失败,在$xUndefined variable上失败-这两种情况都是预期的。
我的动机来自函数式编程,类似的东西也可以工作。有没有一种方法可以写一些类似于我上面的代码的东西?

x9ybnkn6

x9ybnkn61#

我能想到的最接近的方法是将条件更改为使用count(),以便if匹配元素的数量。

$bar = match (count($a = foo())) {
    1 => current($a),
    default => throw new Exception,
};

这是笨拙的,而且必须在检查中有任务,这也使它不那么有吸引力。
正如在对该问题的评论中所提到的,
不,模式匹配在PHP中是不可能的。

具体地说,我认为这是最后一次涉及模式匹配的RFC

相关问题