CakePHP3系のデバッグに役立つ関数の紹介

CakePHP

CakePHP3系のデバッグ時に役立つ関数

今回は、デバッグに役立つ関数を5つ紹介したいと思います。

デバッグする際に用意したデータは、こちら。

デバッグをする際は見やすさも大事だと思ったのでサンプルデータとして配列を用意しました。

紹介する関数は以下の5つです。

CakePHP3系の関数

  • pr()
  • debug()
  • dd()

PHPの関数

  • var_dump()
  • var_export()

■ pr()

出力を <pre> タグで周りを囲む機能を追加した print_r() のラッパー。
debugモードがoffの時は出力されない。
以下、 pr($test);を実行。
ブラウザの表示


Array
(
  [a] => 1
  [b] => 2
  [c] => 3
  [d] => Array
    (
      [e] => 5
      [f] => 6
    )
)


HTMLソース

ログへの出力

基本的に思った通りの動きをしてくれる関数かなと思います。
改行しインデントをつけた状態で表示してくれるので見やすくなります。

■ debug()

デバッグ時に必要な実行ファイル名や行数を表示してくれる。
debugモードがoffの時は出力されない。
以下、 debug($test);を実行。
ブラウザの表示


/src/Controller/TestController.php (line 19)

[
    'a' => '1',
    'b' => '2',
    'c' => '3',
    'd' => [
        'e' => '5',
        'f' => '6'
    ]
]


HTMLソース

ログへの出力

debug()の場合、どのファイルの何行目の出力であるかがわかるので、便利です。しかし、ログに出力する際は他の関数と大きな違いは見当たりませんでした。

■ dd()

debug()実行後にdie()を実行して、終了する関数。
debugモードがoffの時は出力されない。
以下、 dd($test);を実行。
ブラウザの表示


/src/Controller/TestController.php (line 23)

[
    'a' => '1',
    'b' => '2',
    'c' => '3',
    'd' => [
        'e' => '5',
        'f' => '6'
    ]
]


HTMLソース

ログへの出力

基本的にdebug()と変わらないですが画面に出力後プログラム自体を終了するので、ログに出力を行う前に終了してしまうので、注意が必要です。

■ var_dump()

以下、 var_dump($test);を実行。
ブラウザの表示


array(4) { [“a”]=> string(1) “1” [“b”]=> string(1) “2” [“c”]=> string(1) “3” [“d”]=> array(2) { [“e”]=> string(1) “5” [“f”]=> string(1) “6” } }


HTMLソース

ログへの出力

変数の型まで出力されるので、ブラウザを見ながらデバッグする際は便利です。
しかしログでは中身が出力されないので、注意が必要です。

■ var_export()

以下、 var_export($test);を実行。
ブラウザの表示


array(4) { [“a”]=> string(1) “1” [“b”]=> string(1) “2” [“c”]=> string(1) “3” [“d”]=> array(2) { [“e”]=> string(1) “5” [“f”]=> string(1) “6” } } array ( ‘a’ => ‘1’, ‘b’ => ‘2’, ‘c’ => ‘3’, ‘d’ => array ( ‘e’ => ‘5’, ‘f’ => ‘6’, ), )


HTMLソース

ログへの出力

第二引数に「true」を渡すと、ブラウザには出力されなくて、ログには出力されます。
以下、 var_export($test, true);を実行。
ブラウザの表示(何も表示されません。)



HTMLソース(もちろん何も表示されません。)

ログへの出力

var_export()の場合、用途によって引数を指定し実行する必要があります。

まとめ

ブラウザを見ながらデバッグを行う際に役立つ関数

  • シンプルに変数内の構造を見たい場合、pr()
  • 変数の型を見たければ、var_dump()、var_export()
  • 実行された行を確認したければ、debug()
  • 実行された行を確認したい、なおかつその行でプログラムを終了させたければ、dd()

ログファイルを見ながらデバッグを行う際に役立つ関数

  • ログファイルを見ながらデバッグできる関数はブラウザをどの関数も特に違いは見当たらなかったです。
    pr()
    var_export()(ただし第二引数にtrueを指定する必要あり)
    debug()

debugモードのみで表示される関数

  • CakePHP3系独自の関数は、ブラウザにはdebugモードがonの時のみ表示されるようでした。ちなみに、ログに出す時はdebugモードがon/offに関わらず出力されているようでした。
    pr()
    debug()

おまけ REPLについて

CakePHPもREPL(インターラクティブコンソール)が装備されています。
(REPLはリプルと読むらしいです。)
以下のコマンドを実行することで、起動可能。

仕様を確認したい場合などに使ってみてください。

CakePHP