2009/02/07

phpのデバッグ

echoとprint
これは基本。
echo や print は関数ではなく構文なのでカッコが不要です。

echo $something."";
print $something."";

などと省略して書けます。

echo と print は(ほぼ)同じものですが、
echo の方が文字数が少ないのでオススメです。

print_r

引数の型に関係なく変数の中身を表示できます。
配列や連想配列、オブジェクトなどもOK!

print_rは、PHPのバージョン4.3.0以降、第二引数が追加されました。

//$somethingのprint_r表示を$outputに入れる
$output = print_r($something,true);

とするとprint_rの出力結果を変数に入れることができます。
(便利です!)

print_rはブラウザで表示させるときは見づらいので、

echo "改行";
print_r($something);
echo "改行"

などとしてあげるとブラウザで改行がそのまま表示されます。
これも関数にしておくと便利かもしれません。

/*
preタグで囲んだprint_r出力
@param mixed $var 出力したい変数
@return void
*/

function pre_print_r($var){
echo "改行";
print_r($var);
echo "改行";
}
スタイルシートなどで見やすくすると良いと思います。
var_dump
print_rの詳細版です。構造と値だけではなく、型やサイズもあわせて表示します。
オブジェクトの場合、クラス名までわかるので便利です。
厳密にチェックしたい時などに。

例えば
$profile = array(
"company" => "FACTORY",
"name" => "ジェイさん",
"birth_month" => 3,
"birth_day" => 1,
"hobby" => array("dance","プログラム","音楽")
);
var_dump($profile);

とすると

array(5) {
["company"]=>string(7) "FACTORY"
["name"]=>string(10) "ジェイさん"
["birth_month"]=>int(3)
["birth_day"]=>int(1)
["hobby"]=>array(3) {
[0]=>string(5) "dance"
[1]=>string(10) "プログラム"
[2]=>string(4) "音楽"
 }
}

と出力されます。