2013-07-26 22 views
2

我目前正在学习MVC的基础知识。我遇到了下面的代码php致命错误。错误状态为 Can't use method return value in write context。我怎样才能解决这个问题?写入上下文错误中的方法返回值

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

回答

2

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

幸运的是,因为返回值将不会是未定义或不存在,你可以使用缩短的ternary operator

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

5.3之前,你将不得不使用更长的版本:

$module = $uri->fragment(0) ? $uri->fragment(0) : 'index'; 
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)。

相关问题