2

I am currently learning the basics of MVC. I am running into a php fatal error with the code below. The error states Can't use method return value in write context. How can I fix this?

    $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 の多くの小さな癖の 1 つに出くわしました :)。

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 に答える