致命错误:在写上下文中不能使用函数返回值

时间:2012-06-18 13:08:34

标签: php function post exec fatal-error

我有一个非常讨厌的错误,我无法摆脱。这是引起问题的函数:

    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']是一个用户名 - 想法是,在输入用户名后,所有用户的信息都会自动填写

3 个答案:

答案 0 :(得分:8)

函数调用周围不需要empty,实际上empty只适用于变量而不是函数(如您所见)。如果要测试 pututhiness 可能未设置的变量,则只需要empty。它在函数调用周围是没有意义的,因为该函数调用必须存在。而只需使用:

} else if (!get_info_by_WatIAM($_POST['ownerId'])) { ... 

它做同样的事情。如需深入解释,请阅读The Definitive Guide To PHP's isset And empty

答案 1 :(得分:3)

empty只能用于变量,而不能用于表达式(例如调用函数的结果)。文档页面上有一条警告:

  

注意:

     

empty()仅检查变量,因为其他任何内容都会导致解析   错误。换句话说,以下操作无效:empty(trim($name))

只是PHP中最好的左派怪癖中的一个。

一种解决方法是将结果存储在变量中并在其上调用empty,尽管它很笨拙。在此特定情况中,您也可以使用

if (!get_info_by_WatIAM(...))

...虽然一般情况下if (empty($a))if(!$a)不相同。

答案 2 :(得分:-1)

获取此

的值
$a = get_info_by_WatIAM($_POST['ownerId'])

然后chack

empty($a)

它会起作用