PHP初心者の方に知ってほしい5つのこと

こんにちは!むちょこです。
PHPが大好きな人です。
約10年程webエンジニアをやっていて、内2年はプログラミングの講師も兼業していました。
今日は、初心者の方々と触れ合う中で「覚えておくと役に立つかもなー」と感じた5つのことをご紹介します。

安易に「==」を使ってはいけない

早速ですが、みなさんはif文を使うとき、ついこんな書き方をしていないでしょうか?

if文
if($a == $b) {
  echo 'true';
} else {
  echo 'false';
}

もちろんこれでも動くのですが、安易に「==」を多用してしまうと、変数の値によっては見つけにくい落とし穴と化すことがあります。

例えばこんなときには当然trueが出力され、なんの問題もありません。

例1
$a = 1;
$b = 1;

では例2の場合はどうでしょう?

例2
$a = 1;
$b = "1";

例3はどうなるかわかりますか?

例3
$a = 120;
$b = "120abc";

今挙げた3つは、全てtrueが出力されます。全部当たりましたか?

例3も、人間からすると一見falseにも思えますが、trueです。
PHPは文によって自動的に型を変換して定義する性質があるため、この場合はstring型からint型に自動変換されてから比較されます。

ここが不具合の原因になると、見つけるのにかなり苦労します。
特別な理由がない限り、型まで比較してくれる「===」を使うことをオススメします。

MEMO
自動型変換について詳しく知りたい方は、PHPの公式マニュアルをどうぞ!
http://php.net/manual/ja/language.types.type-juggling.php

エラーは怖くない

どんなプログラムにもつきものですが、人によってはプログラミングが嫌いになってしまうほど嫌煙されるエラー。
実は私はエラーが出た部分を直していくのが大好きです。理由は一番プログラムと会話している気分になれるから。

いきなり画面に英語文だけ表示されて、「もうよく分かんない!嫌だ!」と投げ出したくなる人が多いのも承知はしていますが、ここはひとつ落ち着いてエラー文を読んでみましょう。

全てのエラー文の意味を覚えたり、わざわざ翻訳する必要はありません。
慣れるまではエラーが起きている場所だけは読み取るように意識してみてください。

syntax error, unexpected ‘$b’ (T_VARIABLE) in /var/www/hoge/fuga/piyo.php on line 4

例えばこんなエラーが出たら、まずはファイル名をチェック。

/var/www/hoge/fuga/piyo.php

次に行数をチェックします。

on line 4

これだけで、piyo.phpの4行目でなにかトラブルが起きていることがわかります。
あなたのデバッグ作業のための大きなヒントになるはずです。

慣れてきたら最初のエラーの種類もチェックできるようになると良いでしょう。

syntax error

syntax errorは、構文エラー。つまり「書き方が違うよー」と教えてくれているわけです。
ソースを見なくても、どこでなにが起こっているのか大体分かってきましたね。

エラー文は怖いものではなく、むしろいろいろと教えてくれる親切なやつです。いわばメンターに近いと言っても過言ではないかもしれません(さすがに過言かもしれません)。
ぜひエラー文と仲良くなってPHPを楽しんでください☆

関数名を覚える必要はない

これはPHPに限らず、他のプログラミング言語やマークアップ言語にも言えることですが、一つ一つの関数をしっかり覚える必要はありません。
関数名を覚えるよりも、どんなことができる関数が存在するのかを把握しておくことが大事です。
学校のテストではないので、関数名なんてググれば良いですし、IDEを使っている場合はぼんやりでも覚えていれば補完してくれます。

真面目な人ほど一つ一つを丁寧に覚えようと何度も写経してしまいがちですが、同じことを何度も繰り返して丸暗記するよりも
どういうことができるのかをざっくり頭に入れて、自分で新しいものを作っていく方が多くの経験値を得られます。

バージョンアップは余裕をもって

先日PHP7.3.0のalpha3がリリースされました🎉

PHPは常に進化を続け、新しいバージョンが追加されていきます。
また、それに伴い、古いバージョンは順次サポートが終了されていきます。
開発者はなるべく新しい安定バージョンを利用し、古いバージョンで作られたプログラムは適宜バージョンアップする必要があります。

しかし、時に新しいバージョンには下位互換性がないこともあり、その作業には細心の注意が必要です。
「コマンドをいくつか実行するだけでしょ?」と侮ることなく、トラブルは絶対起きるというのを前提にするくらいの余裕を持つのが吉です。

MEMO
バージョン移行時の下位互換性のない変更点や、非推奨となる機能などについては公式マニュアルの付録に記載されています。
http://php.net/manual/ja/appendices.php

var_dump()があればコードが読める

みなさんはvar_dump()を使っていますか?
この関数は私がPHPを始めた当初から愛用していて、var_dump()がないと生きていけないと思うほど大好きな関数です。

var_dump()はその名の通り、var(変数)をdump(ダンプ)する関数です。

int型
$a = 1;
var_dump($a);

例えば上記のようなコードがあった場合、ブラウザには次のように型と値が表示されます。

int(1)

もちろん配列にも使えます。

array型
$colors = array(
    'red'   => '#ff0000',
    'green' => '#00ff00',
    'blue'  => '#0000ff'
);
var_dump($colors);
array(3) {
[“red”]=>
string(7) “#ff0000”
[“green”]=>
string(7) “#00ff00”
[“blue”]=>
string(7) “#0000ff”
}

他にもあらゆる変数に使えるので、コードの解析には欠かせない関数です。
var_dump()と根気さえあれば、誰でもどんなコードでも読めます。
非常に便利なので、ぜひ活用してみてください☆

MEMO
var_dump()の公式マニュアルはこちらです。
http://php.net/manual/ja/function.var-dump.php