PHPでコードを書いていると、変数の中身を確認したくなることがあります。この記事では、PHPで変数の中身を確認するための3つの関数 print_r
, var_dump
, var_export
について詳しく解説します。
print_r, var_dump, var_exportの違い
PHPには変数の中身を確認するための関数として、print_r
, var_dump
, var_export
の3つが用意されています。それぞれの関数には特徴があるので、違いを理解して使い分けましょう。使い分けるのが面倒なら好きな関数を1つ選んで使ってもいいんやで。
関数 | 出力内容 | 出力方法 | 用途 |
---|---|---|---|
print_r | 変数の内容をわかりやすく表示 | 標準出力または戻り値 | 読みやすい形で変数の中身を確認したいとき |
var_dump | 変数の型と値を詳細に表示 | 標準出力 | 変数の詳細情報が必要なとき |
var_export | 変数の内容をPHPコードで表示 | 標準出力または戻り値 | 出力を再利用したいとき |
出力の例
それぞれの関数で配列の内容を出力すると次のようになります。
$arr = array('りんご', '郵便ポスト', '日本共産党');
print_r($arr);
/* 出力
Array
(
[0] => りんご
[1] => 郵便ポスト
[2] => 日本共産党
)
*/
var_dump($arr);
/* 出力
array(3) {
[0]=>
string(9) "りんご"
[1]=>
string(15) "郵便ポスト"
[2]=>
string(15) "日本共産党"
}
*/
var_export($arr);
/* 出力
array (
0 => 'りんご',
1 => '郵便ポスト',
2 => '日本共産党',
)
*/
これらの関数の具体的な使い方を次の章で見ていきましょう。
無料で利用できるプログラミング学習サービスをお探しならば Code Lesson はいかがでしょうか。プロのエンジニアが監修した学習ロードマップで効率的に学習、AIに質問、最後にクイズで理解度をチェックできます。
print_rの使い方
print_rの基本的な使い方
print_r()
の引数に変数を与えると、その変数の情報を人間が読みやすい形で表示します。
$str = 'こんぬづわ';
$int = 4989;
$arr = array('0', 0, 0.0, false, true, null);
print_r($str);
/* 出力
こんぬづわ
*/
print_r($int);
/* 出力
4989
*/
print_r($arr);
/* 出力
Array
(
[0] => 0
[1] => 0
[2] => 0
[3] =>
[4] => 1
[5] =>
)
*/
変数に文字列や数値が入っていたらそのまま表示します。配列ならば [キー] => 値
のようにわかりやすく構造を表示してくれます。もちろん連想配列や多次元配列も扱えます。
シンプルで見やすいのですが欠点もあります。上の例を見ても分かる通り、文字列、整数、浮動小数点数の0
は区別されません。また、値がfalse
やNULL
ならば何も表示されません。そしてtrue
は1
になってしまいます。なんじゃこりゃ。
オブジェクトの内容を表示
オブジェクトの内容を表示することもできます。
class Ideology
{
public $name;
public $color;
public function __construct($name, $color)
{
$this->name = $name;
$this->color = $color;
}
}
$obj = new Ideology('日本共産党', '赤');
print_r($obj);
/* 出力
Ideology Object
(
[name] => 日本共産党
[color] => 赤
)
*/
出力を変数に代入
print_r()
関数はデフォルトでは結果を標準出力に出力しますが、第2引数にtrue
を指定すると結果を戻り値として返します。こうすることによって、結果を変数に代入することができます。
$result = print_r($arr, true);
echo $result;
/* 出力
Array
(
[0] => 0
[1] => 0
[2] => 0
[3] =>
[4] => 1
[5] =>
)
*/
var_dumpの使い方
var_dumpの基本的な使い方
var_dump()
の引数に変数を与えると、その変数の詳しい情報を表示します。
$str = 'こんぬづわ';
$int = 4989;
$arr = array('0', 0, 0.0, false, true, null);
var_dump($str);
/* 出力
string(15) "こんぬづわ"
*/
var_dump($int);
/* 出力
int(4989)
*/
var_dump($arr);
/* 出力
array(6) {
[0]=>
string(1) "0"
[1]=>
int(0)
[2]=>
float(0)
[3]=>
bool(false)
[4]=>
bool(true)
[5]=>
NULL
}
*/
変数の型と値が表示されます。文字列型ならばバイト数も表示します。
型が明示されるので文字列、整数、浮動小数点数の0
は区別できるし、真偽値やNULLも正確に表示されます。というわけで、デバック時にはこのvar_dump()
関数を使うのが普通です。ただし、情報量が多いのでちょっとゴチャゴチャしてるのが欠点といえば欠点。
複数の変数をまとめてダンプ
var_dump()
の引数に変数をカンマ区切りで渡すと、複数の変数の情報をまとめて表示することができます。これができるのはvar_dump()
だけです。
var_dump($str, $int, $arr);
/* 出力
string(15) "こんぬづわ"
int(4989)
array(6) {
[0]=>
string(1) "0"
[1]=>
int(0)
[2]=>
float(0)
[3]=>
bool(false)
[4]=>
bool(true)
[5]=>
NULL
}
*/
オブジェクトの内容を表示
オブジェクトの内容を表示すると次のようになります。
class Ideology
{
public $name;
public $color;
public function __construct($name, $color)
{
$this->name = $name;
$this->color = $color;
}
}
$obj = new Ideology('日本共産党', '赤');
var_dump($obj);
/* 出力
object(Ideology)#1 (2) {
["name"]=>
string(15) "日本共産党"
["color"]=>
string(3) "赤"
}
*/
出力を変数に代入
var_dump()
関数は結果を標準出力に出力します。この出力を変数に代入するにはバッファリングする必要があります。ちょっと面倒くさいね。
ob_start(); //バッファリングをオンにする
var_dump($str); //var_dump実行 出力はバッファに保存される
$result = ob_get_clean(); //バッファの内容を取得し、バッファをオフにする
echo $result;
/* 出力
string(15) "こんぬづわ"
*/
var_exportの使い方
var_exportの基本的な使い方
var_export()
の引数に変数を与えると、その変数の情報を有効なPHPコードで表示します。
$str = 'こんぬづわ';
$int = 4989;
$arr = array('0', 0, 0.0, false, true, null);
var_export($str);
/* 出力
'こんぬづわ'
*/
var_export($int);
/* 出力
4989
*/
var_export($arr);
/* 出力
array (
0 => '0',
1 => 0,
2 => 0.0,
3 => false,
4 => true,
5 => NULL,
)
*/
文字列は引用符で括られ数値は括られません。なので、文字列、整数、浮動小数点数の0
は区別できます。真偽値やNULLも正確に表示されます。見た目もスッキリしていて、var_dump()
とprint_r()
のいいとこ取りだと私は思います。
オブジェクトの内容を表示
オブジェクトの内容を表示すると次のようになります。
class Ideology
{
public $name;
public $color;
public function __construct($name, $color)
{
$this->name = $name;
$this->color = $color;
}
}
$obj = new Ideology('日本共産党', '赤');
var_export($obj);
/* 出力
\Ideology::__set_state(array(
'name' => '日本共産党',
'color' => '赤',
))
*/
出力を変数に代入
var_export()
関数はデフォルトでは結果を標準出力に出力しますが、第2引数にtrue
を指定すると結果を戻り値として返します。こうすることによって、結果を変数に代入することができます。
$result = var_export($arr, true);
echo $result;
/* 出力
array (
0 => '0',
1 => 0,
2 => 0.0,
3 => false,
4 => true,
5 => NULL,
)
*/
さいごに
この記事では、PHPで変数の中身を確認するための3つの方法、print_r()
, var_dump()
, var_export()
について詳しく解説しました。それぞれの違いを理解し、用途に応じて使い分けましょう。
print_r()
は、変数の中身を見やすく表示します。デバッグ時に変数の内容を簡単に確認したいときに便利です。var_dump()
は、変数の中身を型情報も含めて詳細に表示します。より深いデバッグが必要なときに役立ちます。var_export()
は、変数の中身をPHPコードとして出力します。出力を後で再利用するのに適しています。
私はいつもvar_export()
を使っています。var_dump()
ほど出力がゴチャゴチャしていないし、print_r()
よりも出力が正確なのでお気に入りです。
でわでわ
コメント