我自己的函数在PHP 7.1中的应用程序中抛出ArgumentCountError是否可以?

时间:2017-07-10 12:01:51

标签: php

我将通过一个例子来解释我的问题,但是我的问题在标题中更为通用。

我有一个可变参数函数,至少需要2个参数。简化,它的目的是构建一个查询,根据它们的顺序(某种优先级列表)将params中的值与一个值匹配。它至少需要2个参数的原因是,在一个参数上匹配是没有意义的,而应该使用其他方法。这是一个例子:

function match(string $firstElement, string ...$moreElements) {
    // build the query here
}

为了简化代码,我想将签名减少到

function match(string ...$elements) {
    if (count($elements) < 3) throw new \ArgumentCountError();
    // build the query here
}

然而,我的团队中的一些成员认为用户应该抛出异常而不是错误,这遭到了不满。我认为,如果这是意图PHP不会允许我抛出错误,但只捕获它们,实际差异是错误/异常的语义。

1 个答案:

答案 0 :(得分:0)

作为一般规则,在执行脚本期间遇到意外行为时应使用异常。但是,如果结果是预期的,则不应抛出异常。

例如,您的匹配函数可能会返回false或true,具体取决于查询的结果。如果未找到匹配项,则不应抛出异常,只返回错误。

但是,该函数需要一定数量的参数或特定类型。因此,当用户传递的东西与函数签名不匹配时,这是一个意外的行为,抛出错误或异常是正确的结果。这就是评论中指出的InvalidArgumentException的目的。