【问题标题】:Better way to check for empty function args检查空函数参数的更好方法
【发布时间】:2018-06-20 22:55:09
【问题描述】:

几乎我所有的类方法都以相同的方式开始,通过检查传递的参数是否为空(我期望 bool 和 int-0 的变化)

有没有更少重复的检查值的方法?

public function updateproduct($product, $storeid) {
    if ( empty($product) || empty($storeid) ) {
        return false;
    }

    // do stuff

}

【问题讨论】:

  • 好吧,我猜有两个选择是将您的输入定义为一个数组,然后编写一个函数来检查该数组中的每个值,或者使用func_get_args() 获取所有函数参数。我不确定是否真的有更实用的方法。
  • 是的,我想不出另一种方法来做到这一点,但还没有研究过 PHP 的任何神奇东西..
  • 当您需要整数、浮点数、数组等时,您可以使用类型提示。除此之外,您将无效值传递给您的函数是否有很大的原因?似乎问题主要在于您如何使用该功能。
  • 与其检查你的论点是否是它们不应该是的无限事物中的一种或多种,​​不如检查你的论点是否是他们应该的少数事物之一是吗?
  • 是的,打字会带来异常,但要尽量避免这种情况。主要是为了良好的编码练习,谁知道我身后的人会在我不看的时候抛出什么方法:)

标签: php function methods is-empty


【解决方案1】:

使用func_num_args 遍历func_get_args 返回的arg 值数组是完成您所追求的目标的一种方法

function foo($numargs, $arg_list) {
    for ($i = 0; $i < $numargs; $i++) {
        if (empty($arg_list[i])) {
            return false;
        }
    }
    return true;
}

function bar($arg1, $arg2) {
    if (!foo(func_num_args(), func_get_args())) {
        //...
    }
}

bar('baz', null);

【讨论】:

    【解决方案2】:

    此函数测试是否有任何传递给它的参数为空。优点是简单。缺点是发现空值不会短路。

    我想如果你注意到它的影响而不是短路,那么你向你的函数发送了太多的参数。

    function anyEmpty(...$args){
      return array_filter($args) !== $args;
    }
    

    那么我们在updateProduct函数中的用法:

    function updateProduct($product, $storeId){
      if (anyEmpty($product, $storeId)) {
        return False;
      }
      //do your stuff
      return True;
    }
    

    或者,如果您希望动态指定参数:

      if (anyEmpty(...func_get_args())) {
        return False;
      }
    

    【讨论】:

    • 嗯...我有点困惑,将 array_filter()` 的元素与您传递给它的数组进行比较? array_filter() 不是返回数组的每个元素吗?
    • array_filter() 返回一个过滤后的数组。如果您不为其提供函数,那么它将过滤掉 False 值。如果过滤后的数组与原始数组不匹配,我们就知道存在错误或空值。
    猜你喜欢
    • 2011-03-24
    • 1970-01-01
    • 2020-06-01
    • 1970-01-01
    • 2023-03-07
    • 2018-01-15
    • 2014-07-04
    • 2011-11-30
    • 1970-01-01
    相关资源
    最近更新 更多