これは長い間私を悩ませてきた質問であり、答えを見つけることができません...ZendFramework開発者によってかなり頻繁に使用されていることに気づきました。
次の2つの「if」ステートメントの違いは何ですか?:
if (null === $this->user) { ... }
if ($this->user === null) { ... }
私には最初のものはちょっと奇妙に見えます;]
ご回答ありがとうございます。
これは長い間私を悩ませてきた質問であり、答えを見つけることができません...ZendFramework開発者によってかなり頻繁に使用されていることに気づきました。
次の2つの「if」ステートメントの違いは何ですか?:
if (null === $this->user) { ... }
if ($this->user === null) { ... }
私には最初のものはちょっと奇妙に見えます;]
ご回答ありがとうございます。
これはスクリプトの動作方法に違いはなく、単なるコーディング標準であり、推奨事項です。
このように使用することが推奨される理由:
if (null == $this->user)
==の代わりに=とタイプミスして書くと、エラーが発生するという事実です。
($this->user = null)
それ以外の
($this->user == null)
動作しますが、奇妙なバグが発生します(割り当てと最終値は比較ではなくboolとして評価されます)
厳密な比較演算子(===)の習慣として拡張されたと思います
更新:回答を投稿してから3年経っても、このスレッドにはまだいくつかのアクティビティがあることがわかったので、言及し忘れたものを追加すると思いました。このタイプの表記法はとして知られています。たとえば、このウィキペディアのページyoda conditions
で詳細を読むことができます。
if
ステートメントを書くための良い習慣です。このコードを考えてみましょう:
if (10 == $var) {
echo 'true';
} else {
echo 'false';
}
等号を1つ忘れた場合:
if (10 = $var) { }
次に、PHPは解析エラーを生成するので、1つ見逃したことがわかり、=
修正できます。しかし、このコード:
if ($var = 10) { }
10を割り当て$var
、常に真の状態に評価します。の内容が何であれ、$var
上記のコードは常に「true」をエコーし、このバグを見つけるのは非常に困難です。
これらはヨーダ条件と呼ばれます。
値 (false、null、true、または短いものなど) を最初に置くと、人がステートメントをスキャンして条件の意図をすばやく理解することが容易になるという考え方です。
また、ミシュが言ったこと:)
比較すると、このような要素の順序は、ifステートメントでの偶発的な割り当てを防ぐためのものだと思います。
結果は同じになりますが、2番目は論理的です。NULLが変数であるかどうかではなく、変数がNULLであるかどうかを確認したい...逆の理由はここに説明されています:http: //umumble.com/blogs/Programming/321/
値を比較する場合、順序に違いはありません。
誰かがそのようなコードを読み書きする方が簡単かもしれませんが、私にとっては右から左に書くのと同じです。
誤って書いた場合:
if (null = $this->user) { ... }
構文エラーが発生します。
誤って書いた場合:
if ($this->user = null) { ... }
アプリケーションの奇妙な動作の理由を長い間探しています。