はじめに
PHPのデバッグでよく使う var_dump() と var_export()。
どちらも「変数の中身を確認する」関数ですが、実は目的と出力内容が大きく異なります。
この記事では、両者の違いをサンプルコードと実行結果を通して、直感的に理解できるように解説します。
目次
🧩 var_dump()とは
var_dump() は、変数の型情報と値を詳細に表示する関数です。デバッグ時に「中身を見たいとき」に最もよく使われます。
var_dump(mixed $value, mixed ...$values): void- 戻り値:なし(
void) - 出力内容:型+値を人間向けに出力
- 用途:プログラムの動作確認、デバッグ用
🧩 var_export()とは
var_export() は、変数をPHPコードとして再利用できる文字列表現で出力する関数です。
var_export(mixed $value, bool $return = false): string|void- 戻り値:通常は出力、
$return = trueを指定すると文字列として返す - 出力内容:PHPコード形式(
array()構文など) - 用途:設定データの書き出しや、コード再生成など
🧮 サンプルコードで比較
<?php
declare(strict_types=1);
error_reporting(-1);
class Hoge {
public function __construct(
private int $num,
){}
}
$arr = [
123,
'key' => 'val',
new Hoge(123),
];
var_dump($arr);
var_export($arr);🖥 実行結果
🔸 var_dump() の出力
array(3) {
[0]=>
int(123)
["key"]=>
string(3) "val"
[1]=>
object(Hoge)#1 (1) {
["num":"Hoge":private]=>
int(123)
}
}🔸 var_export() の出力
array (
0 => 123,
'key' => 'val',
1 =>
Hoge::__set_state(array(
'num' => 123,
)),
)📊 図解で理解する
┌───────────────────────────┬────────────────────────────────────┐
│ var_dump() │ var_export() │
├───────────────────────────┼────────────────────────────────────┤
│ 出力形式:人間向け │ 出力形式:PHPコード形式 │
│ 例:int(123) │ 例:123 │
│ object内部も展開 │ Hoge::__set_state(array(...)) │
│ 戻り値:void │ 戻り値:void または string │
│ 主な用途:デバッグ │ 主な用途:コード再生成、設定出力 │
└───────────────────────────┴────────────────────────────────────┘💡 __set_state() とは?
var_export() がオブジェクトをPHPコード形式で出力するときに利用する再構築用のメソッドです。
class Hoge {
public function __construct(private int $num) {}
public static function __set_state(array $props): object {
return new self($props['num']);
}
}このように定義しておくと、
eval(var_export($obj, true));のようにして、同じオブジェクトを再生成できます。
✅ まとめ
| 項目 | var_dump() | var_export() |
|---|---|---|
| 主な目的 | デバッグ出力 | 再利用可能なコード出力 |
| 出力形式 | 型+値 | PHPコード構文 |
| 戻り値 | void | void または string |
| オブジェクトの扱い | 中身を展開 | __set_state() 呼び出し形式 |
| よく使う場面 | 中身を確認したい時 | 設定や配列をコード化したい時 |
