ความแตกต่างระหว่าง var_dump, var_export & print_r


126

คือความแตกต่างระหว่างสิ่งที่var_dump, var_exportและprint_r?


14
บางครั้งมันง่ายกว่าที่จะขอให้คนอื่นเข้าใจดีกว่าแล้วอ่านคู่มือ
Deepak Lamichhane

11
@ คำตอบสามัญสำนึก SO ของคุณมักจะชัดเจนกระชับกว่าดำเนินการได้และอ้างอิงได้ง่ายกว่าคู่มือ PHP เสมอ
Mark Fox

คำตอบ:


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_dumpและprint_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

1
ควรเพิ่มว่าคุณสามารถทำให้ print_r () และ var_export () ส่งคืนสตริงแทนการส่งออกได้ในขณะที่ var_dump () ไม่สามารถทำได้ นอกจากนี้ฉันไม่ชอบ var_export () เนื่องจากมันสับสน - หากคุณพยายามส่งออกค่าคงที่ SOMECONST ที่ไม่ได้กำหนดบางส่วนคุณจะได้รับสตริงข้อความ 'SOMECONST' กลับคืนมา ดังนั้นจะไม่พูดว่า NULL, 0, "" แต่จริงๆแล้วมันจะถือว่าเป็นสตริง (และฉันคิดว่าจะแจ้งเตือนด้วย)
userfuser

1
var_export เหมาะสำหรับการแสดงสตริงอย่างปลอดภัยเช่นการป้องกัน quote / backslash
dkellner

1
โดยส่วนตัวแล้วฉันชอบvar_dumpเอาท์พุท น่าเสียดายที่ไม่อนุญาตให้ส่งคืนเอาต์พุตเป็นสตริง ด้วยเหตุนี้ฉันจึงสามารถเชื่อมโยงกับความรู้สึกของ @ iconoclast ในความคิดเห็นด้านบน แต่ต้องเลือกvar_exportมากกว่าvar_dumpสำหรับกรณีการใช้งานนี้เป็นที่ยอมรับสำหรับฉัน เพื่อความสมบูรณ์โปรดสังเกตคำขอคุณลักษณะที่เกี่ยวข้องนี้
Paul van Leeuwen

3

var_dumpและvar_exportเกี่ยวข้องเช่นนี้ (จากคู่มือ )

var_export () รับข้อมูลที่มีโครงสร้างเกี่ยวกับตัวแปรที่กำหนด มันคล้ายกับ var_dump () โดยมีข้อยกเว้นหนึ่ง: การแสดงที่ส่งคืนเป็นโค้ด PHP ที่ถูกต้อง

พวกเขาแตกต่างจากprint_rที่var_dumpข้อมูลการส่งออกมากขึ้นเช่นประเภทข้อมูลและขนาดขององค์ประกอบ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.