2014年11月2日日曜日

初心者がPHPではまる3大ケース

PHP初心者がやりがちな間違ったコーディング方法を紹介します。

■文字列の比較

型を自動変換してくれる全ての言語で言える事ですが、文字列を比較する場合は「===」を使わなければなりません。
言語により微妙にこの部分の動作は異なります。

文字列を扱える言語で型が無い言語なんてのはありえません。
自動変換が行われる場合、どう変換されるのかを頭に入れておかないと意図しない結果を招きます。
PHPの比較構文による自動変換では、文字列の1文字目が数字になっていれば数値型に変換されます。
比較のどちらかが数字ならば、全て数値型で統一されます。このとき数字から開始していない文字列は「0」に変換されます。
すなわち、何も考えずに 「===」を使いなさいということになります。

基本的に「===」は変換処理が無いため高速処理されます。「==」を使わなければならない理由が無い限り「===」を使ったほうが良いでしょう。

特に注意したいのは swich文も自動変換が行われるという点です。
swich文のcaseには数値型と文字列型を混ぜないように注意しましょう。

■ && と and

&& と and は同じと勘違いして説明している人が非常に多いです。
両者は動作が異なりますので、結果も異なる事が多いです。
違いは、処理の優先度です。

$g = true && false;
$h = true and false;

上の2つは、結果が異なります。 if文でよく使われる構成ですよね。
ちょっと式が複雑化しただけで、異なる結果になってしまうのです。

「()」をつけて書き直すとこうなります。

$g = (true && false);
($h = true) and false;

上のような動作となります。 処理の優先度が異なります。

and や or は使う必要性が無いため、ソース上に見かけたら理解していない人が書いたと思って間違いありません。
普通は混乱を避けるため、使いやすさのため、 && || で統一されます。

■ソースファイルの最後に「?>」

ソースファイルがPHPで終わる場合、?>を書いてはいけません。
?>はphpの終わりではなく、htmlの開始タグと覚えましょう。
phpの処理では、htmlの出力がされる前でしか実行不可能な処理もあります。
?>の後に空白改行等が意図せず入り込み、PHPがエラーとなるケースがよくあります。