変数の中身を確認するログの出力で、print_r()
が少し見づらいので、少し整形する関数を書いた。
PHP で変数の中身を確認する時に print_r()
や var_dump()
、var_export()
が使える。問題点として、var_dump()
は内容が長いと途中でカットされてしまう。var_export()
は PHP コードとして出力され、オブジェクトの表記などが若干 print_r()
と異なる。var_export()
でも print_r()
でもさしあたりどちらでもよかったので、今回は、Array
や Object
などレジェックスでマッチさせやすい print_r()
の出力を整形することにした。
仮に、次のコードの $a
を表示させようとする。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
class A { public function test() {} } $_func = function( $f ) use ( $p ) {}; $_resource = fopen( __DIR__ . '_temp.txt', 'w' ); $_oA = new A; $_sMultiLine =<<<HERE Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus maximus, dui in facilisis porta, lacus erat molestie turpis, non aliquam leo ipsum sed eros. Integer ultrices, diam ut gravida aliquam, ipsum tortor vestibulum magna, eu auctor purus nisl sit amet felis. Morbi ex dui, laoreet vitae tellus ac, condimentum mollis lectus. Nullam luctus tortor ac magna pulvinar hendrerit. Ut vestibulum, velit eu mollis viverra, neque diam rhoncus arcu, eget condimentum turpis sem vel mi. Sed pretium magna at magna eleifend convallis. Fusce mattis justo vel purus egestas, malesuada imperdiet tortor sollicitudin. HERE; $a = [ 'first' => [ 'second' => [ 'third' => [ 'fourth' => [ 'string' => '4th depth string value', 'array' => [], 'integer' => 12345, 'decimal' => 0.987654, 'boolean' => true, ], 'multiline' => $_sMultiLine, ], 'empty_array' => [], ], 0 => 'zero key', '' => 'empty key', ], 'object' => $_oA, 'function' => $_func, 'callable' => [ $_oA, 'test' ], 'file' => $_resource, ]; |
通常の print_r() の表記
コード
1 |
print_r( $a ); |
結果
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 |
Array ( [first] => Array ( [second] => Array ( [third] => Array ( [fourth] => Array ( [string] => 4th depth string value [array] => Array ( ) [integer] => 12345 [decimal] => 0.987654 [boolean] => 1 ) [multiline] => Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus maximus, dui in facilisis porta, lacus erat molestie turpis, non aliquam leo ipsum sed eros. Integer ultrices, diam ut gravida aliquam, ipsum tortor vestibulum magna, eu auctor purus nisl sit amet felis. Morbi ex dui, laoreet vitae tellus ac, condimentum mollis lectus. Nullam luctus tortor ac magna pulvinar hendrerit. Ut vestibulum, velit eu mollis viverra, neque diam rhoncus arcu, eget condimentum turpis sem vel mi. Sed pretium magna at magna eleifend convallis. Fusce mattis justo vel purus egestas, malesuada imperdiet tortor sollicitudin. ) [empty_array] => Array ( ) ) [0] => zero key [] => empty key ) [object] => A Object ( ) [function] => Closure Object ( [static] => Array ( [p] => ) [parameter] => Array ( [$f] => <required> ) ) [callable] => Array ( [0] => A Object ( ) [1] => test ) [file] => Resource id #5 ) |
余分な改行やラインブレイクがあるのがわかる。これを取り除いてコンパクトに収めることで、小さなサイズの変数の確認だけで、ログが縦長になってスクロールしなくてはならない状況を避けたい。
print_r() 整形用カスタム関数
次のカスタム関数で出力すると、以下のようになる。
使い方
1 |
echo getPrintR( $a ); |
結果
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
Array( [first] => Array( [second] => Array( [third] => Array( [fourth] => Array( [string] => 4th depth string value [array] => Array() [integer] => 12345 [decimal] => 0.987654 [boolean] => 1 ) [multiline] => Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus maximus, dui in facilisis porta, lacus erat molestie turpis, non aliquam leo ipsum sed eros. Integer ultrices, diam ut gravida aliquam, ipsum tortor vestibulum magna, eu auctor purus nisl sit amet felis. Morbi ex dui, laoreet vitae tellus ac, condimentum mollis lectus. Nullam luctus tortor ac magna pulvinar hendrerit. Ut vestibulum, velit eu mollis viverra, neque diam rhoncus arcu, eget condimentum turpis sem vel mi. Sed pretium magna at magna eleifend convallis. Fusce mattis justo vel purus egestas, malesuada imperdiet tortor sollicitudin. ) [empty_array] => Array() ) [0] => zero key [] => empty key ) [object] => A Object() [function] => Closure Object( [static] => Array( [p] => ) [parameter] => Array( [$f] => <required> ) ) [callable] => Array( [0] => A Object() [1] => test ) [file] => Resource id #5 ) |