检查未定义的对象属性时,组合isset和is_null会失败

时间:2011-04-15 13:41:43

标签: php exception

我正在尝试将issetis_null合并到一个函数中以方便使用

我的方法:

class sys {

  public static function is_null(&$variable) {

    // if it's not set
    if (!isset($variable)) {
      return true;
    }

    // if array
    if (is_array($variable)) {
      return (boolean) (count($variable) < 1);
    }

    // if string
    return (boolean) (strlen($variable) < 1);
  }

}

我在对象中使用它时遇到的问题是以下异常:

  

ErrorException [注意]:间接修改重载属性xxx无效。

2 个答案:

答案 0 :(得分:5)

为了便于使用?等价物是return !isset($var) || empty($var);。那么难吗?

在构建这样的函数时,您需要意识到的是,isset() 不是一个函数。这是一种语言结构。因此,您无法将变量传递给函数,然后在该变量上调用isset(好吧,至少不生成通知)。

其次,没有必要在return (boolean) (strlen($variable) < 1);中强制转换为布尔值。它与return strlen($variable) < 1;完全相同。

第三,没有理由count()或使用strlen(),因为这正是empty()旨在检查的内容。

第四,没有理由通过引用传递论据。它不会改变任何东西,并且在没有理由的情况下不必要地创建引用。只需将参数视为正常(由于写时复制,它不会再使用任何内存)。

总而言之,我建议制作这种“助手”功能。如果要检查它是否为空,请使用!isset($var) || empty($var)。它更清晰,更具语义意义,坦率地说不是重复努力。如果您不关心通知,则可以使用if (empty($variable)) ...

替换整个通话

但如果您确实使用这种功能,我建议更改名称。即使变量不是true,它也会返回null,因此调用函数is_null是误导性的。也许is_empty会更好......

答案 1 :(得分:0)

只需使用empty()

相关问题