我试图将isset
和is_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 [Notice]:间接修改重载属性xxx has no effect.
为了方便使用?相当于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))
替换整个调用…
但是,如果您确实使用这种函数,我建议您更改名称。即使变量不是null
,它也会返回true
,因此调用函数is_null
会产生误导。也许is_empty
会更好…
直接用empty()