2011-02-18 29 views
108

之間的區別var_dump,var_exportprint_r之間的區別是什麼?var_dump,var_export&print_r

+13

有時候更容易讓別人更好地理解,然後閱讀手冊。 –

+7

@你的常識S.O.答案通常比PHP手冊更清晰,更簡潔,可操作並且基本上總是更容易引用。 –

回答

165

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代碼。如果您計算了一些值並希望結果在另一個腳本中保持不變,那麼它很有用。請注意0​​不能處理參考週期/遞歸數組,而var_dumpprint_r檢查這些。默認情況下,打印結果爲var_export,但允許使用可選的$return參數作爲字符串返回。

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

就我個人而言,我認爲var_export是簡潔和精確的最佳折衷。

+45

請注意,'var_export',由於其本質,將會在遞歸數組上死於可怕的遞歸死亡。 'print_r'和'var_dump'(儘管對後者不太確定,因爲我通常不使用它)沒有這個問題。所以不要'var_export($ _ GLOBALS);',例如(其中包含它自己)。 :) – pinkgothic

+6

這個評論是重要的閱讀,應該真的被添加到答案 – ftrotter

+0

@ftrotter我一直認爲評論會解釋好奇心好,但你去了,添加了一個簡短的說明答案。 – phihag

2

var_dumpvar_export涉及這樣的(從manual

var_export()被構造關於給定變量 信息。 它與var_dump()類似,但有一個 異常:返回的表示 是有效的PHP代碼。

它們不同於print_rvar_dump導出更多信息,如數據類型和元素的大小。