【大阪 / 横浜】インフラ / サーバーサイドエンジニア募集中!

【大阪 / 横浜】インフラ / サーバーサイドエンジニア募集中!

【2024年2月~】25年卒 エンジニア新卒採用の募集を開始!

【2024年2月~】25年卒 エンジニア新卒採用の募集を開始!

【導入実績 500社以上】AWS 構築・運用保守・監視サービス

【導入実績 500社以上】AWS 構築・運用保守・監視サービス

【CentOS 後継】AlmaLinux OS サーバー構築・移行サービス

【CentOS 後継】AlmaLinux OS サーバー構築・移行サービス

【WordPress 専用】クラウドサーバー『ウェブスピード』

【WordPress 専用】クラウドサーバー『ウェブスピード』

【格安】Webサイト セキュリティ自動診断「クイックスキャナー」

【格安】Webサイト セキュリティ自動診断「クイックスキャナー」

【低コスト】Wasabi オブジェクトストレージ 構築・運用サービス

【低コスト】Wasabi オブジェクトストレージ 構築・運用サービス

【予約システム開発】EDISONE カスタマイズ開発サービス

【予約システム開発】EDISONE カスタマイズ開発サービス

【100URLの登録が0円】Webサイト監視サービス『Appmill』

【100URLの登録が0円】Webサイト監視サービス『Appmill』

【中国現地企業に対応】中国クラウド / サーバー構築・運用保守

【中国現地企業に対応】中国クラウド / サーバー構築・運用保守

【YouTube】ビヨンド公式チャンネル「びよまるチャンネル」

【YouTube】ビヨンド公式チャンネル「びよまるチャンネル」

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は配列内のデータ個数も出力してくれて便利じゃん

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

この記事がお役に立てば【 いいね 】のご協力をお願いいたします!
0
読み込み中...
0 票, 平均: 0.00 / 10
2,539
X facebook はてなブックマーク pocket
【2024.6.30 CentOS サポート終了】CentOS サーバー移行ソリューション

【2024.6.30 CentOS サポート終了】CentOS サーバー移行ソリューション

【2024年2月~】25年卒 エンジニア新卒採用の募集を開始いたします!

【2024年2月~】25年卒 エンジニア新卒採用の募集を開始いたします!

【大阪 / 横浜】インフラエンジニア・サーバーサイドエンジニア 積極採用中!

【大阪 / 横浜】インフラエンジニア・サーバーサイドエンジニア 積極採用中!

この記事をかいた人

About the author

萬代陽一

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