《PHP8上級試験対策》var_dump()とvar_export()の違いを理解する

  • URLをコピーしました!

はじめに

PHPのデバッグでよく使う var_dump()var_export()
どちらも「変数の中身を確認する」関数ですが、実は目的と出力内容が大きく異なります
この記事では、両者の違いをサンプルコードと実行結果を通して、直感的に理解できるように解説します。

キーワード: var_dump / var_export / __set_state / デバッグ / PHPの出力形式

目次

🧩 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コード構文
戻り値voidvoid または string
オブジェクトの扱い中身を展開__set_state() 呼び出し形式
よく使う場面中身を確認したい時設定や配列をコード化したい時

この記事が気に入ったら
いいねしてね!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次