4

重複の可能性:
PHP - if ステートメントの逆順
null のチェック - どのような順序ですか?

Zend Framework を調べると、すべての変数チェックが逆の方法で行われていることがわかりました。

public function setBootstrap($path, $class = null) {

   if (null === $class) {    // instead of if($class === null)
      $class = 'Bootstrap';
   }

これを行う理由は何ですか?

これは Java および C++ プログラミングにも適していますか?

4

4 に答える 4

7

一部の人々は、それが単一のものを書くのを避けるのに役立つと信じています=(等しいかどうかの比較ではなく代入)

そうすることの利点は、可読性が失われることよりもはるかに小さいと私は信じています (したがって、保守性も!)

コードをテストしない人は、この種のトリックに依存している可能性があります。そして、あなたの質問に答えるために、はい、C から構文を派生させるほとんどの言語に適しています。つまり、適切であり、推奨されません。

于 2012-06-13T12:58:42.590 に答える
5

このスタイルはヨーダ条件と呼ばれます。

基本的には、通常の ( ) スタイルと同じ動作をします$variable === valueが、1 つの利点があります。

=代わりに、==または誤って記述した場合、コンパイラはエラーをスローします===。定数 (例では値) を再割り当てすることはできないためnull、開発者はコンパイラ エラー/警告による間違いをすぐに認識し、時間のかかるバグ検索から解放されます。

したがって、次の行は有効ですが、(ほとんどの場合)意図した動作は表示されません。

if ( $var = null ) { echo 'test'; }

ここでエラーが表示されます:

if ( null = $var ) { echo 'test'; }

ただし、主な欠点は、このスタイルでは可読性が失われることです。ただし、これはコードの読者とその他のコーディング スタイルのガイドラインによって異なります。

于 2012-06-13T12:58:56.413 に答える
3

これはヨーダ記法です。たとえば、誤って書き込んだときに変数に値を割り当てることができないことを除いて、利点についてはわかりません。

if( $foo = "bar" )


その他の例へのリンクは次のとおりです。

http://united-coders.com/christian-harms/what-are-yoda-conditions

于 2012-06-13T13:00:23.613 に答える
1

この場合、比較では値と値の型が考慮されます。これは厳密な比較です。

たとえば、このコード:

if (null == "") {
  echo "null";
}

厳密な比較を使用して実際の値と値自体の型を比較しない限り、PHP が ""、0、null、false を同等の空の値として扱う限り、"null" を出力します。

2 つ目は、 null === $class が使用される理由は、null に値を割り当てることができないためです。一方、間違いを犯して $class = null を割り当てることができます。

于 2012-06-13T12:56:57.170 に答える