Help us understand the problem. What is going on with this article?

【PHP入門講座】 デバッグ用関数

More than 5 years have passed since last update.

目次に戻る

デバッグ用関数の導入

今までは全て表示に echo を用いてきました。この方法ではあらゆるものが 文字列 に変換されて表示されていました。しかし、中には文字列に変換せずにもとの形のままの情報を得たいこともあるでしょう。そこでよく使われるデバッグ用の関数、 var_dump の登場です。この関数を知っているのと知らないので作業効率が大きく変わることもあります。

var_dump
http://php.net/manual/ja/function.var-dump.php

まずは最も基本的な例から。整数をダンプしてみましょう。この関数の名前にもなっていますが、「ダンプ」とは デバッグのために中身を確認する作業 のことを指します。

PHPコード
<?php
$var = 1;
var_dump($var);
実行結果
int(1)

1の左側に int と表示されました。これは次回から学んでいく、 を表しているものです。 int整数型 を表します。次は以下のコードを実行してみましょう。

PHPコード
<?php
$var = 1;
var_dump($var, 2, 3);
実行結果
int(1)
int(2)
int(3)

ここで var_dump 関数の2つの特性が見えてくると思います。

  • 変数だけでなく、直接 をダンプすることも出来る。
  • 複数の変数や値を渡すことが出来る。

このコードを実行して上記の結果にはならず、

実行結果
int(1) int(2) int(3)

と表示されてしまった方、いますでしょうか?もしこう表示されてしまっても何か間違ったことをしてしまったわけではありません。あなたが恐らくブラウザ上でそのまま見ているのが原因でしょう。そのままページの HTMLソース を表示してみてください。正しく表示されるはずです。HTMLを今まで学んできた方であれば、改行コードをソースに記載してもブラウザ上では反映されないのはもちろんご存知ですよね。

HTMLソース上ではなくブラウザ上でそのまま確認したい場合に、以下のように <pre> タグを利用することがあります。

<pre>
<?php
$var = 1;
var_dump($var, 2, 3);
?>
</pre>

また、いっそのこと 「HTMLじゃなくてテキストとして扱ってしまえ!」 という発想で header 関数を使ってMIMEタイプを text/plain に変えてしまうのもアリです。これだとソースを見ているのと全く同じことになります。

PHPコード
<?php
header('Content-Type: text/plain; charset=utf-8');
$var = 1;
var_dump($var, 2, 3);

さて、次に文字列をダンプしてみましょう。日本語をダンプする際にはブラウザ上での文字化けを防ぐために header 関数で文字コードを指定しましょう。

PHPコード
<?php
header('Content-Type: text/html; charset=utf-8');
var_dump('a', 'bc', 'def', 'あ');
実行結果
string(1) "a"
string(2) "bc"
string(3) "def"
string(3) "あ"

string の右の数字は勘のいい人なら 「文字数かな・・・?」 って予想されると思いますが、半分正解・半分誤りとでも言っておきましょうか。何故ならば最後の例の で文字数だとおかしな結果となるからです。厳密な正解は バイト数です。この概念に関しては次の項で詳しく解説していくので、お楽しみに。

最後にいろいろな例を掲載しておきます。これから先、最終的にはこの全てを説明します。

PHPコード
<?php
var_dump('Test') // 文字列
var_dump(1); // 整数値
var_dump(1.0); // 浮動小数点数(一般値)
var_dump(1.8e308); // 浮動小数点数(無限大値)
var_dump(1.8e308 - 1.8e308); // 浮動小数点数(NAN値)
var_dump(true); // 論理値(真)
var_dump(false); // 論理値(偽)
var_dump(null); // NULL値
var_dump(array()); // 配列
var_dump(new stdClass); // オブジェクト
var_dump(tmpfile()); // リソース
実行結果
string(4) "Test"
int(1)
float(1)
float(INF)
float(NAN)
bool(true)
bool(false)
NULL
array(0) {
}
object(stdClass)#1 (0) {
}
resource(1) of type (stream)

Xdebugによる拡張

Xdebugは、var_dump による表示を見やすくするための機能などを備えた拡張ライブラリ(エクステンション)です。本来は PECL (PHP Extension Community Library) から自分でダウンロードしてきてインストールする必要があるのですが、何とXAMPPには既にインストール済みで、php.iniの設定で有効化するだけで使えるようになります。

Xdebugによるデバッグ環境の構築
http://keicode.com/cgi/introducing-xdebug.php

mpyw
古い記事はそのまま参考にしないようにご注意ください
synapse
Synapseは、オンラインサロンサービスにおけるパイオニアとして、かつて存在していたスタートアップです。
https://synapseam.github.io/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away