PHPのデバッグで使うvar_dumpとprint_rとvar_exportの違いって何?

PHPの開発をしているとデバッグ時に変数の中身を見て検証する場合があります。

そのときechoで出力できる単純な変数ならばよいですが、配列の場合はechoでは出力できません。

その場合は var_dump や print_r 、 var_export を使えば中身を見れますが、これらの違いってなんでしょう?

var_dumpとprint_rとvar_exportの違いをPHPマニュアルでは

php.netってサイトで調べてみました。

var_dumpは構造を返して、print_rは分かりやすい形で返して、var_exportはvar_dumpと似てるけどPHPコードで返すってことみたいですね。

一言で言えば、出力の仕方がちょっと違うってだけみたいです。

でもなんかよく分からないので実際に次で出力してみようと思います。

var_dumpとは

この関数は、指定した式に関してその型や値を含む構造化された情報を 返します。配列の場合、その構造を表示するために各値について再帰的に 探索されます。

引用:http://php.net

print_rとは

print_r() は、 変数の値に関する情報を解り易い形式で表示します。
print_r()、var_dump() および var_export() は、オブジェクトの protected および private のプロパティも表示します。 静的なクラスメンバーは表示されません。

引用:http://php.net

var_exportとは

var_export() は、 渡された変数に関する構造化された情報を返します。この関数は var_dump() に似ていますが、 返される表現が有効な PHP コードであるところが異なります。

引用:http://php.net

色々な値をvar_dumpとprint_rとvar_exportで出力してみる

var_dumpとprint_rとvar_exportの違いは出力の仕方ということが分かりました。

実際にはどのように変わるのか試してみようと思います。

一番気になるのは”配列”と”オブジェクト”ですね。

あいうえお(文字列)

var_dump

print_r

var_export

12345(数値)

var_dump

print_r

var_export

true(boolean)

var_dump

print_r

var_export

null

var_dump

print_r

何も表示されない

var_export

空文字

var_dump

print_r

何も表示されない

var_export

配列

出力する配列は以下の通りです。

var_dump

print_r

var_export

オブジェクト

出力するクラスは以下のように定義しました。

アクセス修飾子をいくつか用意しましたがどうなりますか!

var_dump

print_r

var_export

文字列の戻り値で受け取る

var_dumpとprint_rとvar_exportの関数はどれも変数の中身を出力する関数です。

この「出力する」というのはechoと同じように画面上にHTMLの一部として出力します。

しかし、print_rとvar_exportに関しては第二引数に true を設定すると出力せずに文字列の戻り値として受け取ることが出来ます。

これにより、DBに保存したりログファイルに書き出すことができます。

 

例えば $ary という配列の変数があったとします。

print_rだと

のように書くと出力する内容を $str に格納することができます。

 

同様に var_export の場合は、

のように文字列として受け取ることができます。

まとめ

var_dumpとprint_rとvar_exportの違いは出力の仕方。

var_dumpとvar_export はデータ構造を出力し、print_rは分かりやすく値だけ出力するといった感じです。

var_exportとprint_rは第二引数にtrueを設定することで出力せずに文字列として受け取ることもできます。

 

出力して気になった部分は、print_r でNULLか空文字を出力した場合何も表示されないということ。

当然といえば当然なんですが、もしNULLや空文字が想定される場合には検証が出来ないことも考えられます。

コメントを残す

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

CAPTCHA