回答:
出力バッファリングを使用します。
<?php
ob_start();
var_dump($someVar);
$result = ob_get_clean();
?>
strip_tags()
。これを使用すると、タイプと値が返されます。
var_export
チェックアウトすることをお勧めします。これは、出力ではなく出力を返す2番目のパラメーターをvar_export
提供するのと同じ出力を提供しません。var_dump
$return
$debug = var_export($my_var, true);
とを使用するよりも、このワンライナーを使用ob_start
しob_get_clean()
ます。また、PHPコードであるため、出力が少し読みやすくなっています。
違いvar_dump
とvar_export
すなわちvar_export
リターン「変数の解析可能な文字列表現」しながらvar_dump
、単に変数に関する情報をダンプ。これが実際に意味することは、var_export
有効なPHPコードを提供することです(ただし、特にリソースを使用している場合は、変数に関する情報がそれほど多くない場合があります)。
$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);
$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,
)
$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
}
$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*
循環参照に遭遇しました。
int(1)
var_exportが出力するだけで出力され1
ます。
var_export
ブラウザー検索を実行できなかったため、実際にはデバッグには適していません(int)
。また、多くの情報を小さなスペースに変換しますvar_export(''); var_export('\'');
。そして最も重要なのは、PHPの致命的なエラーの準備をすることです:ネストレベルが深すぎます-再帰的な依存関係?C:\ path \
これを行うこともできます:
$dump = print_r($variable, true);
print_r
にはできる限り使用することを好みますが、残念ながら十分な情報が得られない場合があります。例えば、どこそれができる、それが文字列にキャストするので、両方false
とnull
空の文字列として表示されます。これらの違いを気にする場合は、不本意ながらvar_dump
またはに頼るでしょうvar_export
。
serialize()
関数を使用することもできます。時にはそれはデバッグの目的で非常に役立ちます。
error_log
する必要がある場合は、このソリューションを使用しないでください。シリアライズの出力にはnullバイトが含まれる場合があり、nullバイトをerror_log
含む文字列が切り捨てられるためです。
function return_var_dump(){
// It works like var_dump, but it returns a string instead of printing it.
$args = func_get_args(); // For <5.3.0 support ...
ob_start();
call_user_func_array('var_dump', $args);
return ob_get_clean();
}
またecho json_encode($dataobject);
役立つかもしれません
json_encode
すべてのデータvar_dump
が含まれるわけではありません(たとえば、変数型として)。json_encode
と同じ情報をprint_R
、異なる形式で出力します。
var_dump
。またprint_R
、彼のニーズには不十分な情報しか提供していないと述べました。json_encode
およびによって提供される情報に実際の違いはありませんprint_r
。データ形式のみが異なります。これを考えると、print_r
不十分な場合はそうですjson_encode
。もう反対票について文句を言わないでください。それは明らかにランダムなクリックではなかったので、それに対処してください。
この関数は、そのタイプと値を含む1つ以上の式に関する構造化情報を表示します。
だから、ここで本当の PHPのの戻りバージョンvar_dump()
、実際に可変長引数リストを受け入れ、:
function var_dump_str()
{
$argc = func_num_args();
$argv = func_get_args();
if ($argc > 0) {
ob_start();
call_user_func_array('var_dump', $argv);
$result = ob_get_contents();
ob_end_clean();
return $result;
}
return '';
}
$argc
@hanshenrikによって指摘されたように、ここでのチェックは不要であり、間違いなく間違いです。一度それを取り除くと、実際に追加するのはcall_user_func_array
およびfunc_get_args
呼び出しだけです。
関数としての完全なソリューションは次のとおりです。
function varDumpToString ($var)
{
ob_start();
var_dump($var);
return ob_get_clean();
}
これはおそらく少しずれたトピックです。
この種の情報を私のPHP-FPMコンテナーのDockerログに書き込む方法を探していて、以下のスニペットを考え出しました。これはDocker PHP-FPMユーザーが使用できると確信しています。
fwrite(fopen('php://stdout', 'w'), var_export($object, true));
file_put_contents('php://stdout',var_export($object, true),FILE_APPEND);
私はvar_dump()
の詳細出力が本当に好きで、情報が不足しているため(たとえば、データ型が不足している、長さが不足しているなど)、var_export()
sまたはprint_r()
の出力に満足していませんでした。
安全で予測可能なコードを記述するために、空の文字列とnullを区別すると役立つ場合があります。または、1とtrueの間。またはnullとfalseの間。だから私は私のデータタイプを出力に入れたいです。
有用ではありますが、色付きの出力をvar_dump()
人間が読める形式の出力にHTMLタグなしの文字列に変換し、var_dump()
。
あなたが色付けされている場合var_dump()
、それはあなたがvar_dump()
htmlの色を追加するためにphpのデフォルトを上書きするXdebugがインストールされていることを意味することに注意してください。
そのため、このわずかなバリエーションを作成して、必要なものを正確に提供しました。
function dbg_var_dump($var)
{
ob_start();
var_dump($var);
$result = ob_get_clean();
return strip_tags(strtr($result, ['=>' => '=>']));
}
以下の素敵な文字列を返します:
array (size=6)
'functioncall' => string 'add-time-property' (length=17)
'listingid' => string '57' (length=2)
'weekday' => string '0' (length=1)
'starttime' => string '00:00' (length=5)
'endtime' => string '00:00' (length=5)
'price' => string '' (length=0)
それが誰かを助けることを願っています。
http://htmlexplorer.com/2015/01/assign-output-var_dump-print_r-php-variable.htmlから:
var_dump関数とprint_r関数は、ブラウザに直接出力することしかできません。したがって、これらの関数の出力は、phpの出力制御関数を使用してのみ取得できます。以下の方法は、出力を保存するのに役立ちます。
function assignVarDumpValueToString($object) { ob_start(); var_dump($object); $result = ob_get_clean(); return $result; }
ob_get_clean()は、内部バッファに入力された最後のデータのみをクリアできます。したがって、複数のエントリがある場合、ob_get_contentsメソッドが役立ちます。
上記と同じソースから:
function varDumpToErrorLog( $var=null ){ ob_start(); // start reading the internal buffer var_dump( $var); $grabbed_information = ob_get_contents(); // assigning the internal buffer contents to variable ob_end_clean(); // clearing the internal buffer. error_log( $grabbed_information); // saving the information to error_log }