PHPスクリプトで次のコードが見つかりましたが、PHPでエラーが報告されなかったのはなぜですか?PHPの等価性チェックでエラーが発生しない
$current_name == ($type != 3) ? $name : '' ;
それはタイプミスだったとコードを読み取るようになっていた。
$current_name = ($type != 3) ? $name : '' ;
PHPスクリプトで次のコードが見つかりましたが、PHPでエラーが報告されなかったのはなぜですか?PHPの等価性チェックでエラーが発生しない
$current_name == ($type != 3) ? $name : '' ;
それはタイプミスだったとコードを読み取るようになっていた。
$current_name = ($type != 3) ? $name : '' ;
これは奇妙なコードですが、それは読み取り不可能で無駄なものであり、無効ではないからです。これは、基本的にif
という簡略化形式のcondition ? if true : if false
であるternary operatorを使用します。
$type != 3
: このコードは、次のことを行います。 $type
が3
の場合はfalse
、そうでない場合はtrue
と返します。
$current_name
の結果を比較してください。true
(すなわち$current_name == true
)の場合は、$name
を返します。それ以外の場合($current_name == false
)、返信は''
となります。もちろん、ステートメントに割り当てがないので、これは絶対に何もしません。
'($ type!= 3)'に依存して実際に '($ current_name == true)'または '($ current_name == false)'として評価されていないと確信していますか? '$ name'か' '' '$ current_name == x'に基づいて無効にしますか? –
@Alexanderはい、そうです - 私は '?:'はより高い[優先順位](http://php.net/manual/en/language.operators.precedence.php)だったと思いました。 – lonesomeday
それは構文的に正しいです。三元表現が評価され、次に$current_name
と比較されます。全体の表現の結果は使用されません。
あなたはこれらの小括弧は必要ありません。($ type!= 3)?$ name: '']]、あなたは$ current_nameと($ type!= 3)を効果的に比較します – Jauzsika
それはその声明に何も間違っていません。ブール値をどこにも返しません。何らかの理由で 'var_dump($ current_name ==($ type!= 3)?$ name: '');' – feeela
@feeelaを試してみてください。 – Jon