Var_dump, var_export ve print_r arasındaki fark


126

Ne arasındaki farktır var_dump, var_exportve print_r?


14
Bazen başka birinden kılavuzları okumaktan daha iyi anlamasını istemek daha kolaydır.
Deepak Lamichhane

11
@ Sağduyu SO yanıtlarınız genellikle daha net, daha özlü, uygulanabilir ve temelde her zaman PHP kılavuzundan daha kolay referans alınır.
Mark Fox

Yanıtlar:


194

var_dump hata ayıklama amaçlıdır. var_dumpher zaman sonucu yazdırır.

// 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 de hata ayıklama amaçlıdır, ancak üyenin türünü içermez. Dizinizdeki öğe türlerini biliyorsanız kullanmak iyi bir fikirdir, ancak aksi halde yanıltıcı olabilir. print_rvarsayılan olarak sonucu yazdırır, ancak bunun yerine isteğe bağlı$returnparametreninkullanılmasıyla dize olarak döndürülmesine izin verir.

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

var_export geçerli php kodunu yazdırır. Bazı değerleri hesapladıysanız ve sonuçların başka bir kodda sabit olmasını istiyorsanız kullanışlıdır. Notvar_exportbaşvuru döngüleri / yinelemeli diziler kolu, oysa edemezvar_dumpveprint_rbu kontrol edin. var_exportvarsayılan olarak sonucu yazdırır, ancak bunun yerine isteğe bağlı$returnparametreninkullanılmasıyla dize olarak döndürülmesine izin verir.

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

Kişisel olarak, var_exportözlü ve kesin olmanın en iyi uzlaşması olduğunu düşünüyorum .


51
Not var_exportdoğası için de, özyinelemeli diziler, korkunç bir özyinelemeli ölüm ölecek nedeniyle,. print_rve var_dump(yine de, genellikle kullanmadığım için ikincisi hakkında tam olarak emin değilim) bu sorunu yaşamıyorum. Öyleyse var_export($_GLOBALS);, örneğin (kendini içeren) yapmayın . :)
pinkgothic

@ftrotter Her zaman yorumun bu merakı iyi açıklayacağını düşünmüşümdür, ama işte oraya, cevaba kısa bir not ekledim.
phihag

1
Print_r () ve var_export () işlevlerinin çıktı vermek yerine bir dizge döndürmesini sağlayabileceğiniz, ancak var_dump () bunu yapamayacağı da eklenmelidir. Ayrıca, kafa karıştırıcı olduğu için var_export () 'u sevmiyorum - bazı tanımsız sabit SOMECONST'u dışa aktarmaya çalışırsanız, sadece bir metin dizgisi' SOMECONST 'alırsınız. Bu yüzden NULL, 0, "" demeyecek, ama aslında onun bir dizge olduğunu varsayacak (ve sanırım bir BİLDİRİM de atacak).
userfuser

1
var_export, tırnak / ters eğik çizgi koruması gibi bir dizeyi güvenli bir şekilde temsil etmek için iyidir.
dkellner

1
Şahsen ben var_dumpçıktıyı tercih ederim . Çok kötü, çıktının bir dizge olarak döndürülmesine izin vermiyor. Bu nedenle, @ iconoclast'ın yukarıdaki yorumdaki düşüncesini ilişkilendirebilirim. Ama seçmek zorunda var_exportüzerinde var_dumpbu kullanım şeklini bana kabul edilebilir. Tamlık için, bu ilgili özellik talebine dikkat edin .
Paul van Leeuwen

3

var_dumpve var_exportbunun gibi ilişki kurun ( kılavuzdan )

var_export (), verilen değişken hakkında yapılandırılmış bilgi alır. Var_dump () 'a bir istisna dışında benzer: döndürülen gösterim geçerli PHP kodudur.

Bunlar farklı print_rolduğunu var_dumpveri türü ve elemanların boyutu gibi, ihracat fazla bilgi.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.