我目前正在学习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
都被认为是空的(0
、Can't use method return value in write context
0、0.0
)。