var_dump、var_export、print_rの違い


126

どのような違いがあるvar_dumpvar_exportprint_r


14
時には、マニュアルを読んで理解するように他の人に依頼する方が簡単です。
Deepak Lamichhane

11
@Your Common Sense SOの回答は、多くの場合、PHPマニュアルよりも明確で簡潔、実用的であり、基本的に常に参照しやすいです。
マークフォックス

回答:


194

var_dumpはデバッグ用です。var_dump常に結果を出力します。

// var_dump(array('', false, 42, array('42')));
array(4) {
  [0]=> string(0) ""
  [1]=> bool(false)
  [2]=> int(42)
  [3]=> array(1) {[0]=>string(2) "42")}
}

print_rもデバッグ用ですが、メンバーのタイプは含まれていません。配列の要素のタイプを知っている場合に使用することをお勧めしますが、それ以外の場合は誤解を招く可能性があります。print_rデフォルトでは結果を出力しますが、オプションの$returnパラメーターを使用することにより、代わりに文字列として返すことができます。

Array (
    [0] =>
    [1] =>
    [2] => 42
    [3] => Array ([0] => 42)
)

var_exportは有効なphpコードを出力します。いくつかの値を計算し、別のスクリプトで定数として結果が必要な場合に役立ちます。メモvar_export、基準サイクル/再帰的な配列を扱うのに対しことができないvar_dumpprint_r、これらをチェック。var_exportデフォルトでは結果を出力しますが、オプションの$returnパラメーターを使用することにより、代わりに文字列として返すことができます。

array (
  0 => '',
  1 => false,
  2 => 42,
  3 => array (0 => '42',),
)

個人的にvar_exportは、簡潔かつ正確な最高の妥協案だと思います。


51
var_export、その性質上、再帰的な配列では恐ろしい再帰的な死をもたらすことに注意してください。print_rそして、var_dump(ただし、ない完璧必ず、後者については、私は通常、それを使用していないので)その問題を持っていません。したがってvar_export($_GLOBALS);、たとえば、それ自体は含まないでください。:)
pinkgothic

@ftrotter私はいつもコメントでその好奇心がうまく説明されると思っていましたが、そこに行くと、回答に短いメモが追加されました。
phihag 2013

1
文字列を出力する代わりに、print_r()とvar_export()が文字列を返すようにできるが、var_dump()はそれができないことを追加する必要があります。また、紛らわしいのでvar_export()は好きではありません。未定義の定数SOMECONSTをエクスポートしようとすると、テキスト文字列 'SOMECONST'が返されます。したがって、NULL、0、 ""とは表示されませんが、実際には文字列であると見なされます(私はNOTICEもスローするとします)。
userfuser 2014年

1
var_exportは、引用符/バックスラッシュ保護のように、文字列を安全に表すのに適しています。
dkellner、2015年

1
個人的にはvar_dump出力を好みます。残念ながら、出力を文字列として返すことはできません。そのため、上記のコメントで@iconoclastの感情に関連付けることができます。しかし、選択したvar_export以上var_dump、このユースケースのためには、私には許容可能です。完全を期すため、この関連機能のリクエストに注意してください。
Paul van Leeuwen、2016

3

var_dumpそしてvar_export(からこのような関連マニュアル

var_export()は、指定された変数に関する構造化された情報を取得します。これはvar_dump()に似ていますが、1つの例外があります。返される表現は有効なPHPコードです。

それらは、データ型や要素のサイズなど、より多くの情報print_rvar_dumpエクスポートするものとは異なります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.