我目前正在学习MVC的基础知识。我正在使用下面的代码遇到php致命错误。错误说明
Can't use method return value in write context
。我该如何解决这个问题?
$module = empty( $uri->fragment(0) ) ? 'index' : $uri->fragment(0);
答案 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
)。