2

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

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

2 回答 2

2

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

幸运的是,因为返回值不会是未定义的或不存在的,所以您可以使用缩短的三元运算符

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

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

$module = $uri->fragment(0) ? $uri->fragment(0) : 'index';
于 2013-07-26T02:19:40.387 回答
1

您遇到了 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)。

于 2013-07-26T02:13:15.910 回答