问题描述
||
我正在尝试将
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的间接修改无效。
解决方法
为了易于使用?等效为
return !isset($var) || empty($var);
。这么难吗?
建立这样的函数时,您需要意识到的是isset()
不是函数。这是一种语言构造。因此,您不能将变量传递给函数,然后在该变量上调用isset(嗯,至少没有产生通知)。
其次,不需要在:return (boolean) (strlen($variable) < 1);
中强制转换为布尔值。与ѭ6完全相同。
第三,没有理由to7ѭ或使用strlen()
,因为that9ѭ正是要检查的内容。
第四,根本没有理由通过引用传递论点。它不会更改任何内容,并且会在没有理由的情况下不必要地创建引用。只需将参数视为正常值即可(由于写入时复制,它不会使用更多的内存)。
总而言之,我建议不要使用这种“帮助器”功能。如果要检查是否为空,只需使用!isset($var) || empty($var)
。它更清晰,更具语义意义,并且坦率地说,这并非重复工作。如果您不在乎通知,您可以将整个通话替换为ѭ11...
但是,如果您确实使用这种功能,则建议您更改名称。即使变量不是null
,它也会返回true
,因此调用函数is_null
会导致误导。也许15英镑会更好...
,只需用empty()