PHPでのデバッグはほとんどの場合、デバッグ用の関数を使って画面に直接表示して行います。
特にprint_r関数を使うと変数の内容が分かりやすく見れるから便利ですよね。
ただこの関数には1つだけ使いにくい点があって、それは自動で改行されないこと
という訳でここではprint_r関数で改行を表示するためのテクニックについて紹介します。
print_r関数は自動で改行されない
print_r関数は渡した変数の内容を画面上に表示する関数です。
ただこの関数を使った場合、print_rの最後では自動的に改行されません。
そして自動で改行されないと不便なのは例えば次のようなこと
まず不便なのは次のように配列とかをループで回して要素を表示する場合
1 2 3 4 5 |
$colors = [ 'Red', 'Green', 'Blue' ]; foreach( $colors as $color ){ print_r($color); } |
こういう風に配列の中身を確認したくなることってあると思います。
でもprint_rは改行しないので、次のように1行にまとめられて表示されてしまうのが残念な所
1 |
RedGreenBlue |
まあこれでも中身が確認できないわけではないですが、すごく見づらいですよね。
あと不便だと思うのは配列自信を表示するような場合
例えば次はprint_r関数に配列そのものを渡して表示しているコード例
1 2 |
$colors = [ 'Red', 'Green', 'Blue' ]; print_r($color); |
これがどういう表示になるかというと次の通りです。
1 |
Array ( [0] => Red [1] => Green [2] => Blue ) |
こういう風に改行なしで1行で表示されてしまいます。
実際には改行コードが入っているのですが、ブラウザに表示するので無意味です。
このように改行コードが入らないとループとかデータを表示する時に不便ですよね。
そこで表示を見やすくするために改行を入れるテクニックがいくつかあります。
print_rで改行を表示する2つの方法
その方法というのが次の2つ
- print_r出力の最後にbrタグを置く
- print_rの出力をpreタグで囲む
この2つについてコード例と一緒にやり方を説明します。
1. print_rの最後にbrタグを追加
まず1つめの方法はprint_r関数の最後にbrタグを置く方法
この方法はループ内で要素を表示する時とかに便利です。
例えば次がbrタグを使った改行表示のコード例
1 2 3 4 5 |
$colors = [ 'Red', 'Green', 'Blue' ]; foreach( $colors as $color ){ print_r($color . '<br>'); } |
出力の最後に '<br>' を追加するだけです。
こうすればブラウザ上で次のように期待通りの見た目で表示されるようになります。
1 2 3 |
Red Green Blue |
1行にまとめられるよりもこっちの方が一目で理解しやすくなるはずです。
ちなみにブラウザ上で改行するには改行コード( \r とか \n )を使うのはNGです。
例えば次がダメなコード例
1 2 3 4 5 |
$colors = [ 'Red', 'Green', 'Blue' ]; foreach( $colors as $color ){ print_r($color . "\n"); } |
このコードだと次のように1行で表示されてしまいます。
1 |
Red Green Blue |
他の言語だとこれでも良いですが、PHPはブラウザに出力しているから改行には使えません。
ちなみにPHPのbrタグと改行コードの違いについては次の記事で書いた通りです。
上の記事で書いたようにブラウザ上で改行するときは必ずbrタグを使うようにしましょう。
2. print_rをpreタグで囲む
お次はprint_r関数での出力全体をpreタグで囲む方法です。
説明するまでもないですが、preタグというのはテキストを見たまんま表示するタグのこと
これを使えばbrタグに加えて普通の改行コードでも改行が可能です。
例えば次がpreタグを使って改行コードをそのまま表示するコード例
1 2 3 4 5 6 7 |
$colors = [ 'Red', 'Green', 'Blue' ]; print_r('<pre>'); foreach( $colors as $color ){ print_r($color . "\n"); } print_r('</pre>'); |
先ほどブラウザでの改行に改行コードは使えないと書きましたが、preタグなら使えます。
なので画面上では次のように期待通りの場所で改行されて表示されるという訳です。
1 2 3 |
Red Green Blue |
他の言語と同じ感覚で改行コードが使えるのがこの方法のいいところですね。
またpreタグを使うと連想配列をそのまま表示したときにも改行が反映されて見やすくなります。
例えば次が連想配列をpreタグでそのまま表示しているコード例
1 2 3 4 5 |
$colors = [ 'Red', 'Green', 'Blue' ]; print_r('<pre>'); print_r($colors); print_r('</pre>'); |
こうすると次のように改行コードや空白も含めた表示が可能
1 2 3 4 5 6 |
Array ( [0] => Red [1] => Green [2] => Blue ) |
これで複雑な構造の連想配列でも一目で分かりやすくなります。
以上がpreタグを使って改行コードを表示する方法
preタグで囲む手間は増えるものの、改行コードも表示できるのでデバッグに役立つと思います。
ここまでのまとめ
ということでprint_r関数で改行を表示する方法のまとめ
- print_rの最後にbrタグを置く
出力の最後に '<br>' を付けておくことでブラウザ上で改行される
ただし \r や \n のような改行コードを置いても改行されないので注意 - print_rの出力をpreタグで囲む
改行表示させたいprint_r出力全体をpreタグで囲んでおく
この方法だとbrタグだなく改行コードや空白まで表示可能
brタグの方法はループ内で表示する場合、preタグで囲む方法は構造を持つデータ ( 連想配列など ) を表示する場合、などのように使い分けるといいかもしれません。
PHPにはコンソール出力とかはないので、デバッグは全てブラウザ上です。なのでデバッグ時には改行を表示させたほうが開発がスムーズに進みます。
ということでPHPのprint_r関数で改行を表示させる方法でした。ではでは($・・)/~~~