先日、PHPのvar_dumpを用いて、HTML上にも変数内の値をわかりやすくする方法を紹介しました。
通常のデバッグならこれでも十分なんですが、より手軽にわかりやすく表示できる「php-ref」というライブラリも良かったので、初期設定と使い方をメモがてら紹介です。
目次
php-refとは
php-refは、綺麗にPHP変数内の構造を表示してくれるライブラリです。
php-refでは、r()という非常に短い関数を使うことで、print_rやvar_dumpの代わりとなって、とても見やすいデータ表示をしてくれます。やはり、rの一文字で、利用できるのはとても楽です。
通常、var_dumpを使うと以下のようになる出力でも
array(2) { [“vegetable”]=> array(3) { [“carrot”]=> string(12) “にんじん” [“tomato”]=> string(9) “トマト” [“onion”]=> string(12) “たまねぎ” } [“fruit”]=> array(3) { [“apple”]=> string(9) “りんご” [“orange”]=> string(12) “オレンジ” [“grape”]=> string(9) “ぶどう” } }
以下のように、非常に見やすく表示してくれます。
当然ながら、配列だけではなく、クラスなども綺麗に出力してくれます。詳しくは、HTML出力や、テキスト出力のデモを参照してみてください。
php-refの使い方
php-refの利用は、とても簡単なんですが、最初にちょっとした初期設定をする必要があります。
php-refを利用するには、主に以下の手順が必要です。
- php-refのダウンロード&設置
- コードを書く
ライブラリの設置さえできてしまえば、とても手軽に利用できます。
php-refのダウンロード&設置
まずは、php-refをダウンロードする必要があります。
ダウンロードは、digitalnature/php-refから「Download ZIP」ボタンを押してZIPファイルをダウンロードしてください。
ダウンロードが終わると「php-ref-master.zip」というファイルができるので解凍してください。
中には、以下のようなファイルが入っています。
その中から以下のファイルを取り出します。
- ref.css
- ref.js
- ref.php
あとはこれらのファイルを、PHPのプロジェクトファイルにコピペなどで放り込みます。
WordPressの子テーマで利用するなら、以下のように置きます。
こんな感じで、置いておけば初期設定は終了です。
コードを書く
あとは、PHP内で以下のようにライブラリを呼び出します。
require_once 'ref.php';
あとは、中身を参照したい変数などが出てきたときに、以下のように書けばHTMLで出力されます。
r($var);
参考 HTML出力例
以下のように書くと、テキスト出力されます。
rt($var);
参考 テキスト出力例
ちなみに、デバッグ出力した後のコードを実行させたくないときは、以下のように書きます。
~r($var); //HTML ~rt($var); //テキスト
デバッグ用の出力を変数に収めたい場合は、以下のように書きます。
$output = @r($var); //HTML $output = @rt($var); //テキスト
Sublime Textのスニペット
僕の場合は、Sublime Textに以下のようにコードを登録しておいて利用したいときに、手軽に利用できるようにしています。
<snippet> <content><![CDATA[ require_once 'ref.php'; ref::config('expLvl', 3);//3階層まで展開して表示 r(${1}); ]]></content> <!-- Optional: Set a tabTrigger to define how to trigger the snippet --> <tabTrigger>ref_r</tabTrigger> <!-- Optional: Set a scope to limit where the snippet will trigger --> <scope>source.php</scope> </snippet>
以下の部分は、php-refはデフォルトで、1階層しか展開して表示されないので、3階層展開して表示されるように設定を変更しています。
ref::config('expLvl', 3);//3階層まで展開して表示
その他のオプションに関しては、GitHubで確認してください。
動作確認
テストとして、以下のようなコードを書いて試してみました。
$foods = array("vegetable" => array("carrot" => "にんじん","tomato" => "トマト","onion" => "たまねぎ"),"fruit" => array("apple" => "りんご","orange" => "オレンジ","grape" => "ぶどう")); require_once 'ref.php'; ref::config('expLvl', 3);//3階層まで展開して表示 r($foods);
で、以下のように表示されれば、設定完了です。
次回からは、手軽にデバッグを行うことができます。
まとめ
ちょっとしたデバッグ作業なら、PHPに標準であるvar_dumpで十分かと思います。
けれど、「クラス変数の内部を詳細に分析したい」とか「なるべく構造化データを整理して表示したい」なんて時には、php-refの方が見やすくて使いやすいです。
比較的大きなプロジェクトで利用する場合は、最初にデバッグライブラリの設定をしておくと後々楽になるかもしれません。
その他のPHPをデバッグライブラリとして、以下のようなものもあります。