なんかphpが上手く動かない…
「完璧なプログラムコードをはじめから書ける人間はいない。
人は皆、バグと闘いながら生きている」
…と昔の偉い人が言ったかどうかはわかりませんが、
とにかくプログラムにバグは付き物です。
どうしても生まれ続けるバグ…
涙を流しながら白旗を振るのはクールではないので
デバッグという作業をして立ち向かいます。
そんなデバッグをphpではどうやって行うのか
というのを簡単にまとめていきます。
タイポを疑う
match
をmtach
と書いてたり、length
をlenght
と書いてたり
タイピングミスは常に君の命を狙っている。
他にも
build_check_flag
とあるべきところがroom_check_flag
と間違ってたりもする
これは何処かからコピーして持ってきたものを、正しい物に書き換えなかった為に生じる。
シンタックスエラーを疑う
if(isset($var))
はif()
とisset()
の組み合わせだ。
これを
if(isset($var)
と書くとシンタックスエラーが生じてしまう。
()
の入れ子が上記のように2つならまだ可愛いが、これが5個とかなると目がチラついて死ぬ。
エディターの設定によっては()
にハイライトをつけてくれるものがあるので、導入を検討しても良いかもしれない。
変数をチェックする。
変数は中身が変わる、故に変数である。
変数を全て把握している猛者はこの世には存在しない。
変数を把握してないから、変数が悪さをすることがある。
把握できないなら、見えるようにしてしまえば良いのだ。
echo $var
をバグが起こりそうな行の前に記述して実行してみると
意外とこの$var
の中身が思わぬものだったりする。
ただ配列や真偽値は中身を簡単には出力できなくて
配列はvar_dump($array_var)
真偽値はvar_export($boolean_var)
と書かなくてはいけない。
そしてvar_dump($array_var)
して出力した配列変数は凄く見にくい文字列で表示される。
多分、見ただけで軽く死ねる。
なので
echo '<pre>';
var_dump($array_var);
echo '</pre>';
と記述すると見やすい形で出力される。
流れを読む。
「バグは何処かで起こっている」
この状態は不味い。バグを修正しなくてはいけないのに何処にバグが居るのかわからない!
そういう時はプログラムの流れを読むとよい。
ここはああなって…
これがこうなって…
それはそうなるのか…
となればバグが見つかる…かもしれない。
もし流れが理解できなくても
die();
とexit();
を使えば力技で理解できる。
die('1');
if($flag){
die('2');
}else(
die('3');
}
die('4');
と記述すると何処を通ってるかが把握できる
1が表示されるならif
の前までは流れてるし
2ならif
の$flag
がtrue
だし
3なら逆にfalse
だし
4であればif
の最後に到着してることになる。
そしてバグを見つけることが出来れば
…ようやくリングに立ったということだ。
編集後記
入社二日目
社内の独自のフレームワークに新しい実装をすることを任されて
あまりにも無能感が出まくったので調べました。
他人のソースコードを読むのと、それに追記するのマジで辛すぎ…
デバッグさえ出来れば、強くなれそう。