我目前正在学习 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()
它是一种语言结构,直到最近它才允许变量引用作为其参数,而您的代码传递了一个返回值(这不是一个引用)。
幸运的是,因为返回值不会是未定义的或不存在的,所以您可以使用缩短的三元运算符:
$module = $uri->fragment(0) ?: 'index';
在 5.3 之前,您必须使用更长的版本:
$module = $uri->fragment(0) ? $uri->fragment(0) : 'index';
您遇到了 PHP 的许多小怪癖之一 :)。
在 PHP 5.5 之前,empty
仅适用于变量(更多信息参见手册页)。这意味着您需要首先分配$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
)。