PHPで変数のダンプはどの関数を使うのがよさそうか
メジャーなのだけでもvar_dump()
, var_export()
, print_r()
などありどれ使えばよいか迷ったので、簡単にまとめてみた。
主にデバッグとログに吐くのが目的なんで、そういう視点で。オブジェクトもきっちりダンプしたいとかはないが、PHP上で扱える形式で吐いてくれるとデバッグ時にありがたい場合があるのでそこは入れた。
関数 | データ型の表示 | PHPコードとして出力 | 戻り値にできる | 循環参照 |
---|---|---|---|---|
var_dump() | ○ | × | × | ○ |
var_export() | △※1 | ○ | ○ | × |
print_r() | × | × | ○ | ○ |
debug_zval_dump() | ○ | × | × | ○ |
json_encode() | × | × | ○ | △※2 |
※1 データ型は表示されない、とはいえPHPのコードとして出力されるため、実質的にデータ型はわかる。
※2 Warningが出るが、一応出力はできる。
感想
- 戻り値にできない
var_dump()
がとりあえずいらないかなあと。 var_export()
は循環参照で死ぬの以外はいい感じなので、printデバッグ的なところと、循環参照がないとわかってるところのログなどほとんどのところではこれでいいかなと。print_r()
は循環参照あるかもしれないときには、これしかないかな。debug_zval_dump()
は今回初めて知ったけど使わなそう。json_encode()
はオプションいろいろ指定する面倒なければといったところ。でもPretty Printしなければ一行で表示されるのは、ログフォーマットによっては便利かも。