ホームページ >バックエンド開発 >PHPチュートリアル >これはバグと考えてよいでしょうか?

これはバグと考えてよいでしょうか?

WBOY
WBOYオリジナル
2016-06-23 14:02:18806ブラウズ

うわー
これは私の意図を説明するためのもので、実際のアプリケーションはさらに複雑です。この関数は参照を返しますが、三項演算子を使用して表現すると、PHP は戻り値を正しく理解できず、if を使用すると正常に表示されます。

これがバグかどうかはわかりません。多くの人が以前に発見したはずであり、私が使用している 5.4.11 と 5.5.0alpha4 にもこの問題があります


ディスカッションへの返信 (解決策)

マニュアルにも記載されています:

注: 三項演算子はステートメントであるため、その評価は変数ではなくステートメントの結果であることに注意してください。これは、変数を参照によって返したい場合に重要です。参照によって返される関数内のステートメント return $var == 42 ? $a : $b; は機能しません。PHP の将来のバージョンでは、これに対して警告が発行されます。


結び目

これはバグではありません!しかし、正しい文法分析

関数 &test() は、関数が参照を返すことを宣言しています。参照なので、参照されるキャリアが存在する必要があります。

三項演算は構造体であり、その結果は実数変数に代入する必要があります
$a = is_null($data) ? $data : $data;
それなら何も問題はありません
もちろんtest() もエラーなし

php5.3 以降、多くの初期のプログラムでこの問題が発生します


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。