写入上下文错误中的方法返回值

时间:2013-07-26 02:09:39

标签: php

我目前正在学习MVC的基础知识。我正在使用下面的代码遇到php致命错误。错误说明 Can't use method return value in write context。我该如何解决这个问题?

    $module = empty( $uri->fragment(0) ) ? 'index' : $uri->fragment(0);

2 个答案:

答案 0 :(得分:2)

这是因为empty()是一种语言构造,直到最近它才允许变量引用作为其参数,而你的代码传递一个返回值(不是引用)。

幸运的是,由于返回值不会被定义或不存在,您可以使用缩短的ternary operator

$module = $uri->fragment(0) ?: 'index';

在5.3之前,你必须使用更长的版本:

$module = $uri->fragment(0) ? $uri->fragment(0) : 'index';

答案 1 :(得分:1)

你遇到过PHP的许多小问题之一:)。

在PHP 5.5之前,empty仅适用于变量(manual page上的更多信息)。这意味着您需要先将$url->fragment(0)分配给某些内容:

$fragment = $uri->fragment(0);
$module = empty($fragment) ? 'index' : $fragment;

由于存在不是问题,因此您实际上不需要为空(因为empty($var)等同于isset($var) && $var):

$module = $uri->fragment(0) ? $uri->fragment(0) : 'index';

在这种情况下无关紧要,但作为一般建议,请小心使用empty字符串。它可以有几个“wtf?”角落里的时刻。例如,所有形式的0都被视为空(0"0"0.0)。