11

これは長い間私を悩ませてきた質問であり、答えを見つけることができません...ZendFramework開発者によってかなり頻繁に使用されていることに気づきました。

次の2つの「if」ステートメントの違いは何ですか?:

if (null === $this->user) { ... }

if ($this->user === null) { ... }

私には最初のものはちょっと奇妙に見えます;]

ご回答ありがとうございます。

4

7 に答える 7

16

これはスクリプトの動作方法に違いはなく、単なるコーディング標準であり、推奨事項です。

このように使用することが推奨される理由:

if (null == $this->user)

==の代わりに=とタイプミスして書くと、エラーが発生するという事実です。

($this->user = null)

それ以外の

($this->user == null)

動作しますが、奇妙なバグが発生します(割り当てと最終値は比較ではなくboolとして評価されます)

厳密な比較演算子(===)の習慣として拡張されたと思います

更新:回答を投稿してから3年経っても、このスレッドにはまだいくつかのアクティビティがあることがわかったので、言及し忘れたものを追加すると思いました。このタイプの表記法はとして知られています。たとえば、このウィキペディアのページyoda conditionsで詳細を読むことができます。

于 2012-06-01T11:52:17.040 に答える
5

ifステートメントを書くための良い習慣です。このコードを考えてみましょう:

if (10 == $var) {
  echo 'true';
} else {
  echo 'false';
}

等号を1つ忘れた場合:

if (10 = $var) { }

次に、PHPは解析エラーを生成するので、1つ見逃したことがわかり、=修正できます。しかし、このコード:

if ($var = 10) { }

10を割り当て$var、常に真の状態に評価します。の内容が何であれ、$var上記のコードは常に「true」をエコーし​​、このバグを見つけるのは非常に困難です。

于 2012-06-01T12:08:10.037 に答える
2

これらはヨーダ条件と呼ばれます。

値 (false、null、true、または短いものなど) を最初に置くと、人がステートメントをスキャンして条件の意図をすばやく理解することが容易になるという考え方です。

また、ミシュが言ったこと:)

于 2012-06-01T11:53:01.760 に答える
1

比較すると、このような要素の順序は、ifステートメントでの偶発的な割り当てを防ぐためのものだと思います。

于 2012-06-01T11:52:04.507 に答える
1

結果は同じになりますが、2番目は論理的です。NULLが変数であるかどうかではなく、変数がNULLであるかどうかを確認したい...逆の理由はここに説明されています:http: //umumble.com/blogs/Programming/321/

于 2012-06-01T11:52:14.793 に答える
1

値を比較する場合、順序に違いはありません。

誰かがそのようなコードを読み書きする方が簡単かもしれませんが、私にとっては右から左に書くのと同じです。

于 2012-06-01T11:50:17.440 に答える
1

誤って書いた場合:

if (null = $this->user) { ... }   

構文エラーが発生します。

誤って書いた場合:

if ($this->user = null) { ... }

アプリケーションの奇妙な動作の理由を長い間探しています。

于 2012-06-01T11:55:42.657 に答える