方法在写入上下文错误中返回值


Method return value in write context error

我目前正在学习MVC的基础知识。我遇到了一个php致命错误,代码如下。错误状态CCD_ 1。我该怎么解决这个问题?

    $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的许多小怪癖之一:)。

在PHP5.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都被认为是空的(0Can't use method return value in write context0、0.0)。