4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【PHP】if($a == 1) と if(1 == $a) って何が違うの?

Last updated at Posted at 2023-12-03

PHP の if 文の条件式の記述方法で、バグ対策になるような書き方があったので記事にしたいと思います。

例えば、以下のような2つのコード例があるとします。

例1のコード
$a = 2;
if($a == 1){
  echo "one";
}else{
  echo "not one";
}
例2のコード
$a = 2;
if(1 == $a){
  echo "one";
}else{
  echo "not one";
}

上記の2つのコード例を見て分かるように、違いがあるのは 条件式の変数と定数の順序 だけです。出力される内容に変化はありません(not one と出力されるはずです)。

「じゃあ、2つのどちらの例でも一緒なら、別にどちらの条件式で記述しても良いじゃん!」と思うところですが、条件式の誤り を防ぐ役割を含めた書き方をする場合では「例2のコード」が良いかもしれません。

もし間違って「==」を「=」と書いたら…

少し極端なケースですが、上記の2つのコード例の条件式で使用されている「==」を「=」と書き間違えてしまった場合 はどうなるでしょうか?

例1のコード(記述ミス有)
$a = 2;
if($a = 1){
  echo "one";
}else{
  echo "not one";
}
例2のコード(記述ミス有)
$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 のようなエラー文が表示されると思います。

このように、条件式の変数と定数の順序によって、構文の誤りに気付きやすくなる、かもしれない というメモでした。

4
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?