【问题标题】:Fatal error: Can't use function return value in write context致命错误:无法在写入上下文中使用函数返回值
【发布时间】:2012-06-20 11:11:57
【问题描述】:

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

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

【问题讨论】:

  • 在 SO 上的帖子中包含内联代码时,请始终用反引号 (`) 括起来,以便正确突出显示。

标签: php function post exec fatal-error


【解决方案1】:

你不需要empty 围绕函数调用,事实上empty 只适用于变量而不是函数(如你所见)。如果你想测试一个变量可能没有设置thruthiness,你只需要empty。围绕函数调用毫无意义,因为该函数调用必须存在。而是简单地使用:

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

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

【讨论】:

  • 你说的很对——改正了!很好的解释,非常感谢 deceze
【解决方案2】:

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

注意:

empty() 只检查变量,因为其他任何东西都会导致解析 错误。换句话说,以下内容将不起作用:empty(trim($name))

只是 PHP 最好的单独怪癖之一。

一种解决方法是将结果存储在一个变量中并调用empty,尽管它很笨重。在这个具体情况,你也可以使用

if (!get_info_by_WatIAM(...))

...虽然一般来说,if (empty($a))if(!$a) 是不等价的。

【讨论】:

  • @deceze:不用担心。但是恕我直言,在没有明确警告它不等效的情况下提出 ! 替代方案并不是一个好主意。
  • 当然,在谈到变量时,它们并不等同。如果变量不存在,empty 不会触发错误。否则他们会做同样的事情。至于函数调用empty根本不适用。
  • 谢谢乔恩,很好的回答。我用了 !在功能前面并修复了它。可悲的是,deceze 打败了你!
【解决方案3】:

得到这个的值

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

然后破解

empty($a)

会有用的

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-03
    • 2011-08-07
    • 1970-01-01
    • 2016-09-15
    相关资源
    最近更新 更多