我正在尝试将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 [注意]:间接修改重载属性xxx无效。
答案 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()