PHPのコーディングで

if("t"==$変数){}
if($変数=="t"){}
上のように2通りの記述を見かけるのですが
何か違うのでしょうか

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2009/08/25 23:30:53
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:tera-p No.2

回答回数92ベストアンサー獲得回数21

ポイント23pt

PHP だけの話ではなく,同じような構文を持つC言語で,以前に同じような議論がありました.

比較演算子 == と,代入演算子 = を書き間違えるのは時々あるミスで,かつ見つけにくいですよね.

上記の例でそのようなミスをしたとき,前者の書き方だと文法エラーとなりますが,後者だとエラーになりません

(括弧内の式の値は常に "t" になり,if文が必ず成立する).

というわけで,人間にとって直感的には後者のほうが読みやすいのですが,上記のエラーチェックの観点から

「前者の書き方が優れている」と主張されることがあります.

ただ,C言語の時は,「前者の書き方が優れている」と主張した入門書がとっても酷い品質だったことと,

このような「必ずしも文法エラーではないが,ちょっと怪しい」書き間違いをチェックするツールとして lint

という名の優秀なツールがすでに広く使われていたので,「人間にとって読み易い (後者の) 形で書くべきだ」

という結論でほぼ決着がついたと記憶しています.

PHP の場合はどうでしょう.lint モードはありますがあまり賢くないようですし,そもそも使い捨ての性格が

強い言語ですので,好みの問題でどちらを使っても良いのかな,と個人的には思います.

id:dedara

まったく知らない意外な事情でした。

腑に落ちてよかったです。ありがとうございました。

2009/08/25 23:28:03

その他の回答3件)

id:nandedarou No.1

回答回数230ベストアンサー獲得回数34

ポイント23pt

どちらも同じ意味です。

$変数の内容が t ならば、{}内のコードを実行すると言う意味になります。

id:dedara

変数と文字列の比較や変数とboolean値の比較のときの何らかのtipなのかなと

思ったのですが、そういうものではないのですか?

2009/08/25 03:50:42
id:tera-p No.2

回答回数92ベストアンサー獲得回数21ここでベストアンサー

ポイント23pt

PHP だけの話ではなく,同じような構文を持つC言語で,以前に同じような議論がありました.

比較演算子 == と,代入演算子 = を書き間違えるのは時々あるミスで,かつ見つけにくいですよね.

上記の例でそのようなミスをしたとき,前者の書き方だと文法エラーとなりますが,後者だとエラーになりません

(括弧内の式の値は常に "t" になり,if文が必ず成立する).

というわけで,人間にとって直感的には後者のほうが読みやすいのですが,上記のエラーチェックの観点から

「前者の書き方が優れている」と主張されることがあります.

ただ,C言語の時は,「前者の書き方が優れている」と主張した入門書がとっても酷い品質だったことと,

このような「必ずしも文法エラーではないが,ちょっと怪しい」書き間違いをチェックするツールとして lint

という名の優秀なツールがすでに広く使われていたので,「人間にとって読み易い (後者の) 形で書くべきだ」

という結論でほぼ決着がついたと記憶しています.

PHP の場合はどうでしょう.lint モードはありますがあまり賢くないようですし,そもそも使い捨ての性格が

強い言語ですので,好みの問題でどちらを使っても良いのかな,と個人的には思います.

id:dedara

まったく知らない意外な事情でした。

腑に落ちてよかったです。ありがとうございました。

2009/08/25 23:28:03
id:nandedarou No.3

回答回数230ベストアンサー獲得回数34

ポイント22pt

==の右と左の値を比較して、同じなら、{}内が実行されます。

同じかどうかを判断するだけなので、右と左の順番は、無関係です。

だから、自分が分かり易い方にすればいいと思いますよ。

ちなみに、違う型の値を比較した時に、どうなるかは、「PHP 型の比較表」をご覧下さい。

http://www.php.net/manual/ja/types.comparisons.php

の「==による緩やかな比較」と書いてある部分を探して下さい。その下の表を見てください。

一番左の縦の列が、==の右側

一番上の横の列が、==の左側

そして、その時、どういう値になるかが、総当り形式で書いてあります。

(IF文の場合で言えば、TRUEならば、IF文の{}内のコードが実行されます。)

右側と左側を置き換えても同じ結果であることが分かります。

id:dedara

比較表を参考にしてみます。

ありがとうございました

2009/08/25 23:28:48
id:nttkyk No.4

回答回数1ベストアンサー獲得回数0

ポイント22pt

if("t"==$変数){}

この書き方は単純なタイポによるエラー回避のテクニックとして知られてます。

if($変数=="t"){}

の場合==を=としてしまうと$変数の中身を"t"とするという意味になってしまい

常にif文の中が実行されてしまいます。

これが

if("t"==$変数){}

の場合は==を=としてしまっても、"t"に$変数を入れることはできないため

エラーが起きて動かなくなるので、タイプミスがわかるというわけです。

id:dedara

質問しないとわからなかったと思います。

ありがとうございました。

2009/08/25 23:30:27
  • id:nakamuraaaaa
    tips的なことでいえば、

    if("t" == $変数){}

    と書くべきところを間違って下記(1)のように書いてしまってもエラーになります。

    if("t" = $変数){} ・・・(1)

    下記(2)のように書いてしまうと、$変数に"t"を代入した結果(つまり真)を判定するので、コーディングミスに気付きにくいことがあります。

    if($変数 = "t"){} ・・・(2)

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません