var_dump の結果を文字列にキャプチャするにはどうすればいいですか? 質問する

var_dump の結果を文字列にキャプチャするにはどうすればいいですか? 質問する

出力をキャプチャしたいのですがvar_dump文字列に。

PHP ドキュメントには次のように書かれています。

ブラウザに直接結果を出力するものと同様、出力制御機能この関数の出力をキャプチャし、文字列に保存するために使用できます (例)。

それがどのように機能するかの例は何でしょうか?

print_r()それは有効な可能性ではありません。必要な情報が得られないからです。

ベストアンサー1

試すvar_export

ぜひチェックしてみてくださいvar_export— 同じ出力は提供されませんが、var_dump2 番目の$returnパラメータが提供され、出力を印刷するのではなく返すようになります。

$debug = var_export($my_var, true);

なぜ?

ob_start私はと を使用するよりもこのワンライナーの方が好きですob_get_clean()。また、出力は PHP コードだけなので、少し読みやすいと思います。

との違いはvar_dumpvar_export「変数の解析可能な文字列表現」var_exportを返すのに対し、は単に変数に関する情報をダンプする点です。これは実際には、有効なPHPコードを返すことを意味します(ただし、特に を使用している場合は、変数に関する十分な情報が得られない可能性があります)。var_dumpvar_exportリソース)。

デモ:

$demo = array(
    "bool" => false,
    "int" => 1,
    "float" => 3.14,
    "string" => "hello world",
    "array" => array(),
    "object" => new stdClass(),
    "resource" => tmpfile(),
    "null" => null,
);

// var_export -- nice, one-liner
$debug_export = var_export($demo, true);

// var_dump
ob_start();
var_dump($demo);
$debug_dump = ob_get_clean();

// print_r -- included for completeness, though not recommended
$debug_printr = print_r($demo, true);

出力の違い:

var_export ($debug_export上記の例):

 array (
  'bool' => false,
  'int' => 1,
  'float' => 3.1400000000000001,
  'string' => 'hello world',
  'array' => 
  array (
  ),
  'object' => 
  stdClass::__set_state(array(
  )),
  'resource' => NULL, // Note that this resource pointer is now NULL
  'null' => NULL,
)

var_dump ($debug_dump上記の例):

 array(8) {
  ["bool"]=>
  bool(false)
  ["int"]=>
  int(1)
  ["float"]=>
  float(3.14)
  ["string"]=>
  string(11) "hello world"
  ["array"]=>
  array(0) {
  }
  ["object"]=>
  object(stdClass)#1 (0) {
  }
  ["resource"]=>
  resource(4) of type (stream)
  ["null"]=>
  NULL
}

print_r ($debug_printr上記の例の場合):

Array
(
    [bool] => 
    [int] => 1
    [float] => 3.14
    [string] => hello world
    [array] => Array
        (
        )

    [object] => stdClass Object
        (
        )

    [resource] => Resource id #4
    [null] => 
)

注意:var_export循環参照は処理されません

循環参照を持つ変数をダンプしようとすると、 を呼び出すvar_exportと PHP 警告が表示されます。

 $circular = array();
 $circular['self'] =& $circular;
 var_export($circular);

結果:

 Warning: var_export does not handle circular references in example.php on line 3
 array (
   'self' => 
   array (
     'self' => NULL,
   ),
 )

一方、var_dumpとはどちらも、循環参照に遭遇したときにprint_r文字列を出力します。*RECURSION*

おすすめ記事