我目前正在学习MVC的基础知识。我遇到了下面的代码php致命错误。错误状态为 Can't use method return value in write context
。我怎样才能解决这个问题?写入上下文错误中的方法返回值
$module = empty($uri->fragment(0)) ? 'index' : $uri->fragment(0);
我目前正在学习MVC的基础知识。我遇到了下面的代码php致命错误。错误状态为 Can't use method return value in write context
。我怎样才能解决这个问题?写入上下文错误中的方法返回值
$module = empty($uri->fragment(0)) ? 'index' : $uri->fragment(0);
这是因为empty()
是一种语言结构,直到最近它只允许变量引用作为它的参数,而你的代码传递一个返回值(它不是引用)。
幸运的是,因为返回值将不会是未定义或不存在,你可以使用缩短的ternary operator:
$module = $uri->fragment(0) ?: 'index';
5.3之前,你将不得不使用更长的版本:
$module = $uri->fragment(0) ? $uri->fragment(0) : 'index';
你遇到过很多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
)。