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しなければ一行で表示されるのは、ログフォーマットによっては便利かも。