人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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

●質問者: dedara
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:PHP コーディング 変数 記述
○ 状態 :終了
└ 回答数 : 4/4件

▽最新の回答へ

1 ● nandedarou
●23ポイント

どちらも同じ意味です。

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

◎質問者からの返答

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

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


2 ● tera-p
●23ポイント ベストアンサー

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

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

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

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

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

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

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

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

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

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

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

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

◎質問者からの返答

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

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


3 ● nandedarou
●22ポイント

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

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

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

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

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

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

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

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

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

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

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

◎質問者からの返答

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

ありがとうございました


4 ● nttkyk
●22ポイント

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

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

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

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

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

これが

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

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

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

◎質問者からの返答

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

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

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ