我有一个非常讨厌的错误,我无法摆脱。以下是导致问题的函数:
function get_info_by_WatIAM($WatIAM, $info) {
$users_info = array();
exec("uwdir -v userid={$WatIAM}", $users_info);
foreach ($users_info as $user_info) {
$exploded_info = explode(":", $user_info);
if (isset($exploded_info[1])){
$infoArray[$exploded_info[0]] = $exploded_info[1];
}
}
return $infoArray[$info]; }
以下是调用函数的内容:
} elseif ( empty(get_info_by_WatIAM($_POST['ownerId'])) ) { ...
我真的很感激任何建议。非常感谢!
如果代码没有意义,这里有一个进一步的解释:exec使用一个程序来存储学校中所有用户的信息。这些包括教师、姓名、用户 ID 等内容。$_POST['ownerId']
是一个用户名 - 这个想法是,在输入用户名时,所有用户的信息都会自动填写
你不需要empty
函数调用,事实上empty
只适用于变量而不是函数(如你所见)。仅当您要测试可能未设置为通过性的变量时,才需要empty
。函数调用毫无意义,因为该函数调用必须存在。相反,只需使用:
} else if (!get_info_by_WatIAM($_POST['ownerId'])) { ...
它做同样的事情。有关深入的解释,请阅读 PHP isset And empty 的权威指南。
empty
只能用于变量,不能用于表达式(例如调用函数的结果)。文档页面上有一条警告:
注意:
empty()
只检查变量,因为其他任何事情都会导致解析 错误。换句话说,以下内容将不起作用:empty(trim($name))
。
这只是PHP最好的怪癖之一。
一种解决方法是将结果存储在变量中并对其调用empty
,尽管它很笨拙。在这种特定情况下,您还可以使用
if (!get_info_by_WatIAM(...))
。尽管一般来说,if (empty($a))
和 if(!$a)
并不等同。
得到这个的值
$a = get_info_by_WatIAM($_POST['ownerId'])
然后查克
empty($a)
它会工作