我正在尝试将一个功能组合在一起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);
}
}
Run Code Online (Sandbox Code Playgroud)
我在一个对象中使用它时遇到的问题是以下异常:
ErrorException [注意]:间接修改重载属性xxx无效.
为了方便使用?相当于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会更好......