記事一覧はこちら 

 

こんばんは!

 

ゆうです。

 

 

今回は

「デバッグで使う関数」

についてお伝えします。

 

 

初心者の方にありがちなのですが

デバッグを行う際、全て表示に

echo」を用いていませんか? 

 

 

この方法ではあらゆるものが

文字列 に変換されて表示されているんです。

 

 

しかし、中には文字列に変換せずに

もとの形のままの情報を得たい時も出てきます。

 

 

そこでよく使われるデバッグ用の関数、 

var_dump の登場です。

 

この関数を知っているのと知らないので

作業効率が大きく変わる

こともあります。

 

 

var_dump(公式ドキュメント)   

 

 

まずは最も基本的な例から。

整数をダンプしてみましょう。 

 

 

この関数の名前にもなっていますが、 

「ダンプ」とは デバッグのために中身を確認する作業 

のことを指します。

 
 
PHPコードーーーーーーーーーーーーーーーーーー

$var = 1;
var_dump($var);
実行結果
int(1)
ーーーーーーーーーーーーーーーーーーーーーーー
 
 
1の左側に int と表示されました。
こちらの記事で解説している
表しているものです。 
 
 
int整数型 を表します。
次は以下のコードを実行してみましょう。
 
 
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ソース上ではなくブラウザ上で
そのまま確認したい場合に、以下のように
タグを利用することがあります。  


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

また、いっそのこと

「HTMLじゃなくてテキストとして扱ってしまえ!」

という発想で header 関数を使って

MIMEタイプを text/plain に変えてしまうのもアリです。

 

 

これだとソースを見ているのと全く同じことになります。  

 

PHPコードーーーーーーーーーーーーーーーーーーーーー

header('Content-Type: text/plain; charset=utf-8');
$var = 1;
var_dump($var, 2, 3);
ーーーーーーーーーーーーーーーーーーーーーーーーーーーー
 さて、次に文字列をダンプしてみましょう。
日本語をダンプする際にはブラウザ上での
文字化けを防ぐために header関数で文字コードを
指定しましょう。 
 
 
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コードーーーーーーーーーーーーーーーーーーーーー

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)
ーーーーーーーーーーーーーーーーーーーーーーーーーーーー
 
今回はこのくらいにしておきましょう。
デバッグは初めのうちはあまり意識しないかもしれませんが、
方法によって見つけやすさが変わります。
どんどん使っていきましょう。