PHP の if 文の条件式の記述方法で、バグ対策になるような書き方があったので記事にしたいと思います。
例えば、以下のような2つのコード例があるとします。
$a = 2;
if($a == 1){
echo "one";
}else{
echo "not one";
}
$a = 2;
if(1 == $a){
echo "one";
}else{
echo "not one";
}
上記の2つのコード例を見て分かるように、違いがあるのは 条件式の変数と定数の順序 だけです。出力される内容に変化はありません(not one
と出力されるはずです)。
「じゃあ、2つのどちらの例でも一緒なら、別にどちらの条件式で記述しても良いじゃん!」と思うところですが、条件式の誤り を防ぐ役割を含めた書き方をする場合では「例2のコード」が良いかもしれません。
もし間違って「==」を「=」と書いたら…
少し極端なケースですが、上記の2つのコード例の条件式で使用されている「==」を「=」と書き間違えてしまった場合 はどうなるでしょうか?
$a = 2;
if($a = 1){
echo "one";
}else{
echo "not one";
}
$a = 2;
if(1 = $a){
echo "one";
}else{
echo "not one";
}
上記例のように「==」を「=」と書き間違えてしまった場合、「例1のコード(記述ミス有)」は代入演算子(=)の評価結果が「1」となり条件は「true」となります。つまり「one」がそのまま表示されてしまいます。
一方、「例2のコード(記述ミス有)」の場合、条件式で記述されている if(1 = $a)
という書き方は PHP の文法的には無効であるためエラーが発生します。PHP Parse error: Syntax error, unexpected '=' on line 2
のようなエラー文が表示されると思います。
このように、条件式の変数と定数の順序によって、構文の誤りに気付きやすくなる、かもしれない というメモでした。