0

長い間、私はこのようなものを使用していました:

$foo = $foo ?: $bar; // similar to $foo = $foo ? $foo : $bar;

そしてそれはうまくいきました。

PHPしかし、現在、バージョン の新しいホスティングを使用して5.2.17おり、同様のコードを実行しようとすると、解析エラーが表示されます:

Parse error: syntax error, unexpected ':' in /../

どうすればこれを解決できますか?

4

2 に答える 2

6

短縮された 3 項構文は、 PHP 5.3 以降でのみ使用できます。

于 2013-02-08T06:58:22.573 に答える
1
Please note that the ternary operator is a statement, and that it
doesn't evaluate to a variable, but to the result of a statement. This
is important to know if you want to return a variable by reference.
The statement return $var == 42 ? $a : $b; in a return-by-reference
function will therefore not work and a warning is issued in later PHP
versions.

So there is a problem with the return-by-reference for the ?: syntax.
That's way I explicitly wrote what should be returned. 

参照サイトhttps://groups.google.com/forum/#!msg/doctrine-user/qbSAvaKH5uI/DF_2XSxFvG4J

があったとは言えませんがbug、URLhttps ://bugs.php.net/bug.php ?id=60169からはbug

there is also segfault in (***)?:value notation.
like:
   <?php
     $str = array('test');
     list($a, $b) = is_array($str)?:$str;

and this make *the patch doesn't work* (a memory leak)
于 2013-02-08T07:16:58.720 に答える