web-dev-qa-db-ja.com

PHPを使用する場合の(null!= $ object)と($ object!= null)の(ある場合)違いは何ですか?

私はJava=に慣れているため、常に条件が左から右に解釈されると考えています。つまり、null != $objおよび$obj != null

これは、PHPには当てはまらないようです。

PHPで常に左側のnullから始めると、何か問題がありますか?JavaまたはPHP条件を処理するときに他のことをするように自分自身を訓練する必要がありますか?

8
Wizard Of Tech
  • (技術的な)違いはありません。私の知る限り、Java)もありません。
  • PHPでは、これらのいずれも使用しないでください。

可能であれば、常に厳密な比較演算子===および!==を使用することをお勧めします。実際に緩い比較演算子が必要になるときがわかります。

誤解

私はあなたがいくつかのことについて混乱するかもしれないと信じています:

  • 短絡演算子
  • 評価の順序
  • 演算子の優先順位

PHPマニュアルには、「PHPは各条件を左から右に順番にチェックする」と書かれています。

番号、

  • PHPmanualしないと言う、それはコメントだ。
  • PHPはそれをしません

PHPは条件を左から右に評価しますが、結果が判明すると停止します。

expr1 && expr2

expr1falseに評価される場合、expr2評価されません。これは短絡と呼ばれ、それは あまりよくないようです-documented –この問題に関する他の公式のメモは見つかりませんでした例1のコメント。しかし、これはよく知られている既知の機能です。

誤謬

私はJava=に慣れているため、条件は左から右に解釈されると常に考えています。つまり、nullに重要な違いがある!= $ objと$ obj!= null


PHPは、左から右に順番に各条件をチェックします
Ergo:同じ「ベストプラクティス」を適用できます

エルゴ:nothing–不等分割。結論は前提から続いていません。 constant == $variableまたは$variable == constantの使用は、short-circuiting評価の順序、または演算子の優先順位

未定義の動作

!=の両方のオペランドが常に評価されます。 PHPの場合、評価順序(ここでは関係ありません)は実際には nspecified です(ドキュメントにはありません)。

4
phant0m

あなたの特定のケースに関して、別のアプローチは、組み込みのphp関数is_nullを使用することです。つまり、is_null($ mixedValue)で終わることになり、すべての作業が自動的に行われ、型の比較などすべてが適切に行われます。

0
Vadim