var_dumpとvar_export、print_rの使い分け

var_dump と print_r、var_export とは、変数の中身を確認するデバッグ関数です。型まで見たいなら var_dump、構造を読みやすく眺めるなら print_r、動くPHPコードで出すなら var_export と使い分けます。

var_dumpは型まで見せてくれる

デバッグでとりあえず中身を覗くなら var_dump ですね。値だけでなく型と、文字列なら長さまで出してくれるのが強みです。「数値のつもりが文字列だった」みたいな型の取り違えを追うときは、型が見える var_dump が一番頼りになります。出力は標準出力へ直接吐かれます。

var_dump('5', 5, true, [1, 2]);
// string(1) "5"
// int(5)
// bool(true)
// array(2) { [0]=> int(1) [1]=> int(2) }

print_rは読みやすさ重視、戻り値も取れる

型はいらないから構造を見やすく眺めたい、というときは print_r です。配列の入れ子がインデントされて人間に優しい表示になります。第2引数に true を渡すと、出力せずに文字列として返してくれるので、ログに残したいときに便利ですね。ただし型が出ないので、真偽値やnullの区別が付きにくいのは頭に入れておきたいところです。

$str = print_r(['a' => 1, 'b' => [2, 3]], true);
// 出力せず文字列で受け取れる → ログへ
error_log($str);

print_r(false); // 何も表示されないように見える(空)。型の区別は弱い

var_exportは「そのまま動くPHP」で出す

もう一つ、var_export は出力が有効なPHPコードになるのが特徴です。出したものをコピペすればそのまま変数に代入できる形なので、フィクスチャを作ったり設定を書き出したりに向いています。これも第2引数 true で文字列として受け取れます。用途は「再利用できる出力」ですね。

$code = var_export(['a' => 1, 'b' => [2, 3]], true);
echo $code;
// array ( 'a' => 1, 'b' => array ( 0 => 2, 1 => 3, ), )

// そのまま設定ファイルに書けば読み込んで使える

まとめ

ざっくり言えば、型まで見て追いたいときは var_dump、構造を読みやすく眺めるなら print_r、コードとして再利用したいなら var_export、という住み分けだと思います。print_r と var_export は第2引数 true で戻り値として受け取れるので、ログに残す用途ではこの二つが効いてきますね。私は普段の探りは var_dump、記録に残すときは print_r、と手が勝手に選ぶようになりました。

よくある質問

Q. print_r や var_export の出力をログに残せますか?
A. どちらも第2引数に true を渡すと、出力せず文字列として返してくれます。error_log などに渡せるので、記録用途ではこの二つが便利です。

Q. 真偽値や null を確認したいときはどれがいいですか?
A. print_r は型が出ず false や null の区別が付きにくいので、var_dump が向いています。型と、文字列なら長さまで見せてくれます。

類似投稿

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です