どんな事でもお気軽にお問い合わせください
0120-803-656
24時間受付いたします

PHPでデバッグ。さてどうする・・・?


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

開発を進めるにあたって、必ずついて回るのがデバッグ。今回は、デバッグする際の強力な味方、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は配列内のデータ個数も出力してくれて便利じゃん

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


お問い合わせ 採用情報 エンジニアブログ
ISO27001認証
Contact PageTop
株式会社ビヨンド

© beyond Co., Ltd. All rights reserved.