2011-07-06 1 views
0

PHPスクリプトで次のコードが見つかりましたが、PHPでエラーが報告されなかったのはなぜですか?PHPの等価性チェックでエラーが発生しない

$current_name == ($type != 3) ? $name : '' ; 

それはタイプミスだったとコードを読み取るようになっていた。

$current_name = ($type != 3) ? $name : '' ; 
+0

あなたはこれらの小括弧は必要ありません。($ type!= 3)?$ name: '']]、あなたは$ current_nameと($ type!= 3)を効果的に比較します – Jauzsika

+2

それはその声明に何も間違っていません。ブール値をどこにも返しません。何らかの理由で 'var_dump($ current_name ==($ type!= 3)?$ name: '');' – feeela

+0

@feeelaを試してみてください。 – Jon

答えて

3

これは奇妙なコードですが、それは読み取り不可能で無駄なものであり、無効ではないからです。これは、基本的にifという簡略化形式のcondition ? if true : if falseであるternary operatorを使用します。

  1. チェックするかどうか$type != 3

    このコードは、次のことを行います。 $type3の場合はfalse、そうでない場合はtrueと返します。

  2. #1の結果と$current_nameの結果を比較してください。
  3. #2がtrue(すなわち$current_name == true)の場合は、$nameを返します。それ以外の場合($current_name == false)、返信は''となります。

もちろん、ステートメントに割り当てがないので、これは絶対に何もしません。

+0

'($ type!= 3)'に依存して実際に '($ current_name == true)'または '($ current_name == false)'として評価されていないと確信していますか? '$ name'か' '' '$ current_name == x'に基づいて無効にしますか? –

+0

@Alexanderはい、そうです - 私は '?:'はより高い[優先順位](http://php.net/manual/en/language.operators.precedence.php)だったと思いました。 – lonesomeday

3

それは構文的に正しいです。三元表現が評価され、次に$current_nameと比較されます。全体の表現の結果は使用されません。

関連する問題