PHPでデバッグ。さてどうする・・・?その時に便利で強力な味方var_exportについて解説

こんにちは。
開発チームのワイルド担当、萬代です。

開発を進めるにあたって、必ずついて回るのがデバッグ。今回は、デバッグする際の強力な味方、var_exportについて解説してみたいと思います。

デバッグする時、どうやってますか?

基本中の基本はvar_dumpだと思います。これを知らない人は、恐らくPHPを書いたことがない人でしょう。
でも、var_dumpはログに出力できません(単体では、という事。できなくはないけれど、デバッグという用途を考えるとお手軽感がまるでない)。
これがvar_dump最大の悩みどころだと思います。

じゃあ、print_rなのか?
print_rの前後でpreタグをechoするとか、あるある過ぎてもはやギャグですね。たまにやります(やるのか?)が。

serialize? それをDBに突っ込みますか。PHP前提ならそれでもいい・・・訳ないですよね。serializeでデバッグするなんて、茨の道にしか見えないけれど、いるんですよね、たまに。

もろに表示させたい時は、var_dumpでいいんですが、ログに書き落とすなどの用途に使う場合は、var_exportを私は推したい。
もしかすると、今更声高に言うほどではないのかも知れない。

var_exportってなんぞ?

var_exportという関数は、その名の通り、変数を外出しする時に使うものです。
その証左に、出力される情報は、まんまPHPの変数宣言となっています。

<?php

$hoge = array(
    'a',
    'b',
    'c',
    'd',
);

var_export($hoge);

この出力は、以下のようになります。

array (
  0 => 'a',
  1 => 'b',
  2 => 'c',
  3 => 'd',
)

ちなみに、var_dumpとprint_rのフォーマットは以下の通りです。

// var_dump
array(4) {
[0]=>
string(1) "a"
[1]=>
string(1) "b"
[2]=>
string(1) "c"
[3]=>
string(1) "d"
}

// print_r
Array
(
    [0] => a
    [1] => b
    [2] => c
    [3] => d
)

ちなみに、PHP: var_export - Manual のサンプルソースに
var_exportしたデータを、evalを使って再度変数として定義するやり方が載っていますが、使途は不明ですが、要はそういう事です。

 

var_exportの真の実力

var_exportは、弊社が得意としているAPI開発において、その実力を遺憾なく発揮します。
API開発では、受け取ったリクエストを処理してJSON形式にして出力する事が多いですが、var_dumpすると、var_dumpした情報付きのJSONデータをレスポンスとして返してしまうので、クライアント側でJSONをパースする際に確実にエラーになります。

その際、ログファイルをtailして動作の確認をする事が多いと思いますが、前述の通り、ログファイルにvar_dumpの情報を書き落とすには、少しコツが必要です。
var_exportなら、第二引数にtrueを添えるだけで、出力を変数に格納できるので、ログファイルへの出力は非常に簡単です。

fuelphpなら、以下のようにログファイルへ出力できます。

$hoge = array(
    'a',
    'b',
    'c',
    'd',
);

Log::debug(var_export($hoge, true));

可変引数のvar_dumpには到底出来ない芸当ですね。

var_dumpは配列内のデータ個数も出力してくれて便利じゃん

慣れろ、としか言いようがありません。
以上です。

開発のプロに相談したい場合

弊社ビヨンドでは、これまでに培ったシステム開発の豊かな実績・技術・ノウハウと、OSS の技術、AWS などのクラウド技術を掛け合わせた、確かなクオリティとコストパフォーマンスに優れた、Webシステムの受託開発をおこないます。

また、大規模・高負荷なゲームやアプリ・デジタルコンテンツなどの、Webシステム / アプリ基盤のインフラ構築・運用の技術とノウハウを駆使した、サーバーサイド / バックエンド開発・独自APIの連携開発を手掛けています。

開発案件でお困りの方は、下記のサイトをご覧ください。

● Webシステム開発
● サーバーサイド開発(API / DB)

この記事がお役に立てば【 いいね 】のご協力をお願いいたします!
0
読み込み中...
0 票, 平均: 0.00 / 10
3,239
X facebook はてなブックマーク pocket

この記事をかいた人

About the author

萬代陽一

ソーシャルゲームのウェブ API などの開発がメイン業務ですが、ありがたいことにマーケティングなどいろんな仕事をさせてもらえています。
なおビヨンド内での私の肖像権は CC0 扱いになっています。