if("t"==$変数){}
if($変数=="t"){}
上のように2通りの記述を見かけるのですが
何か違うのでしょうか
PHP だけの話ではなく,同じような構文を持つC言語で,以前に同じような議論がありました.
比較演算子 == と,代入演算子 = を書き間違えるのは時々あるミスで,かつ見つけにくいですよね.
上記の例でそのようなミスをしたとき,前者の書き方だと文法エラーとなりますが,後者だとエラーになりません
(括弧内の式の値は常に "t" になり,if文が必ず成立する).
というわけで,人間にとって直感的には後者のほうが読みやすいのですが,上記のエラーチェックの観点から
「前者の書き方が優れている」と主張されることがあります.
ただ,C言語の時は,「前者の書き方が優れている」と主張した入門書がとっても酷い品質だったことと,
このような「必ずしも文法エラーではないが,ちょっと怪しい」書き間違いをチェックするツールとして lint
という名の優秀なツールがすでに広く使われていたので,「人間にとって読み易い (後者の) 形で書くべきだ」
という結論でほぼ決着がついたと記憶しています.
PHP の場合はどうでしょう.lint モードはありますがあまり賢くないようですし,そもそも使い捨ての性格が
強い言語ですので,好みの問題でどちらを使っても良いのかな,と個人的には思います.
どちらも同じ意味です。
$変数の内容が t ならば、{}内のコードを実行すると言う意味になります。
変数と文字列の比較や変数とboolean値の比較のときの何らかのtipなのかなと
思ったのですが、そういうものではないのですか?
PHP だけの話ではなく,同じような構文を持つC言語で,以前に同じような議論がありました.
比較演算子 == と,代入演算子 = を書き間違えるのは時々あるミスで,かつ見つけにくいですよね.
上記の例でそのようなミスをしたとき,前者の書き方だと文法エラーとなりますが,後者だとエラーになりません
(括弧内の式の値は常に "t" になり,if文が必ず成立する).
というわけで,人間にとって直感的には後者のほうが読みやすいのですが,上記のエラーチェックの観点から
「前者の書き方が優れている」と主張されることがあります.
ただ,C言語の時は,「前者の書き方が優れている」と主張した入門書がとっても酷い品質だったことと,
このような「必ずしも文法エラーではないが,ちょっと怪しい」書き間違いをチェックするツールとして lint
という名の優秀なツールがすでに広く使われていたので,「人間にとって読み易い (後者の) 形で書くべきだ」
という結論でほぼ決着がついたと記憶しています.
PHP の場合はどうでしょう.lint モードはありますがあまり賢くないようですし,そもそも使い捨ての性格が
強い言語ですので,好みの問題でどちらを使っても良いのかな,と個人的には思います.
まったく知らない意外な事情でした。
腑に落ちてよかったです。ありがとうございました。
==の右と左の値を比較して、同じなら、{}内が実行されます。
同じかどうかを判断するだけなので、右と左の順番は、無関係です。
だから、自分が分かり易い方にすればいいと思いますよ。
ちなみに、違う型の値を比較した時に、どうなるかは、「PHP 型の比較表」をご覧下さい。
http://www.php.net/manual/ja/types.comparisons.php
の「==による緩やかな比較」と書いてある部分を探して下さい。その下の表を見てください。
一番左の縦の列が、==の右側
一番上の横の列が、==の左側
そして、その時、どういう値になるかが、総当り形式で書いてあります。
(IF文の場合で言えば、TRUEならば、IF文の{}内のコードが実行されます。)
右側と左側を置き換えても同じ結果であることが分かります。
比較表を参考にしてみます。
ありがとうございました
if("t"==$変数){}
この書き方は単純なタイポによるエラー回避のテクニックとして知られてます。
if($変数=="t"){}
の場合==を=としてしまうと$変数の中身を"t"とするという意味になってしまい
常にif文の中が実行されてしまいます。
これが
if("t"==$変数){}
の場合は==を=としてしまっても、"t"に$変数を入れることはできないため
エラーが起きて動かなくなるので、タイプミスがわかるというわけです。
質問しないとわからなかったと思います。
ありがとうございました。
まったく知らない意外な事情でした。
腑に落ちてよかったです。ありがとうございました。