php var_dump () vs print_r ()


297

ความแตกต่างระหว่างvar_dump()และprint_r()ในแง่ของการแยกอาร์เรย์เป็นสตริงคืออะไร?

คำตอบ:


355

var_dumpแสดงฟังก์ชั่นที่มีโครงสร้างข้อมูลเกี่ยวกับตัวแปร / นิพจน์รวมทั้งประเภทและมูลค่า อาร์เรย์มีการสำรวจซ้ำด้วยค่าที่เยื้องเพื่อแสดงโครงสร้าง นอกจากนี้ยังแสดงค่าอาร์เรย์และคุณสมบัติของวัตถุที่อ้างอิง

print_r()แสดงข้อมูลเกี่ยวกับตัวแปรในทางที่สามารถอ่านได้โดยมนุษย์ ค่าอาร์เรย์จะถูกนำเสนอในรูปแบบที่แสดงถึงคีย์และองค์ประกอบองค์ประกอบสัญกรณ์ที่คล้ายกันใช้สำหรับวัตถุ

ตัวอย่าง:

$obj = (object) array('qualitypoint', 'technologies', 'India');

var_dump($obj) จะแสดงผลลัพธ์ด้านล่างในหน้าจอ

object(stdClass)#1 (3) {
 [0]=> string(12) "qualitypoint"
 [1]=> string(12) "technologies"
 [2]=> string(5) "India"
}

และprint_r($obj)จะแสดงผลด้านล่างในหน้าจอ

stdClass Object ( 
 [0] => qualitypoint
 [1] => technologies
 [2] => India
)

ข้อมูลเพิ่มเติม


76
print_r (null) จะไม่คืนค่าใด ๆ เมื่อ var_dump (null) ส่งคืนค่า NULL ซึ่งมีประโยชน์เมื่อทำการดีบัก
rosh3000

7
คุณสามารถขยายคำตอบของคุณด้วย 'var_export' ได้หรือไม่
joryl

1
ข้อดีสองประการของ var_dump () คือข้อมูลที่ถูกทิ้งจะถูกใส่ไว้ในองค์ประกอบก่อน เมื่อใช้ var_dump () คุณจะเห็นว่าแต่ละประเภทมีสีของตัวเอง เพิ่มความสามารถในการอ่าน
Julian

3
@Julian เฉพาะเมื่อติดตั้ง xdebug แล้ว
Leif Neland

57

โดยทั่วไป print_r( )ผลลัพธ์ที่ได้จะดีกว่าอ่านได้กระชับและอ่านง่ายกว่ามนุษย์อ่านได้ แต่ไม่สามารถแสดงประเภทข้อมูลได้

ด้วยprint_r()คุณสามารถเก็บเอาท์พุทเป็นตัวแปร:

$output = print_r($array, true);

ซึ่งvar_dump()ไม่สามารถทำได้ ยังvar_dump()สามารถแสดงประเภทข้อมูล


9
var_dump () สามารถเก็บไว้ในตัวแปรได้แม้ว่าจะเป็นบิต uglier: stackoverflow.com/questions/139474/…
SgtPooki

7
คุณสามารถเป็น 'พี่ชาย' var_export ()ถ้าคุณต้องการประหยัด
CSᵠ

21

var_dump() จะแสดงประเภทของสิ่งต่างๆรวมถึงสิ่งที่อยู่ในนั้น

ดังนั้นคุณจะได้รับ => (string)"var" ตัวอย่างอยู่ที่นี่

print_r() จะเพิ่งเอาท์พุทเนื้อหา

จะส่งออก => "var" ตัวอย่างอยู่ที่นี่


12
ผมคิดว่าตัวอย่างที่ดีจะเป็นvar_dump(0.0);ที่เอาท์พุทfloat(0)VS print_r(0.0);ซึ่งเอาท์พุท0(จึงนำไปสู่ความสับสนประเภทเป็นไปได้) ...
ircmaxell

13

หากคุณถามว่าคุณควรใช้อะไรฉันมักจะใช้print_r()เพื่อแสดงค่าและvar_dump()เมื่อมีปัญหากับประเภทตัวแปร


8

var_dumpแสดงข้อมูลที่มีโครงสร้างเกี่ยวกับวัตถุ / ตัวแปร ซึ่งรวมถึงประเภทและค่า เช่นเดียวกับprint_rอาร์เรย์จะเกิดซ้ำผ่านและเยื้อง

print_rแสดงข้อมูลที่มนุษย์สามารถอ่านได้เกี่ยวกับค่าด้วยรูปแบบการนำเสนอคีย์และองค์ประกอบสำหรับอาร์เรย์และวัตถุ

สิ่งที่สำคัญที่สุดที่ควรสังเกตคือvar_dumpประเภทของเอาต์พุตและค่าในขณะที่print_rไม่มี


5

ความแตกต่างที่สำคัญระหว่างvar_dumpและprint_r

ทั้งฟังก์ชั่นทิ้งข้อมูลเกี่ยวกับตัวแปรแต่var_dumpมีพารามิเตอร์หลายตัวที่จะถูกทิ้งซึ่งprint_rสามารถนำพารามิเตอร์สองตัวออกมาซึ่งพารามิเตอร์ตัวแรกคือตัวแปรที่คุณต้องการดัมพ์และตัวที่สองคือค่าบูลีน

var_dumpไม่สามารถส่งคืนค่าใด ๆ ก็สามารถถ่ายโอนข้อมูลเท่านั้น / พิมพ์ค่าที่เป็น print_r สามารถส่งกลับข้อมูลตัวแปรถ้าเราตั้งค่าพารามิเตอร์ที่สองของการprint_rที่จะเป็นจริง ค่าที่ส่งคืนของprint_rจะอยู่ในรูปแบบสตริง

ข้อมูลที่พิมพ์โดยprint_rมีมากขึ้นในรูปแบบที่สามารถอ่านได้ในขณะที่var_dumpพิมพ์ค่าดิบ

print_rฟังก์ชั่นสามารถใช้งานได้ในหลายบริบทซึ่งvar_dumpสามารถใช้ในวัตถุประสงค์การดีบักส่วนใหญ่เนื่องจากไม่สามารถคืนค่าได้


1
vardumpใช้เวลาหนึ่งหรือมากกว่าอาร์กิวเมนต์และแต่ละคนจะถูกทิ้ง
บิชอป

@ บิชอปใช่คุณถูกต้องอาจมีข้อโต้แย้งมากขึ้น แต่จะไม่คืนค่าใด ๆ
Akshay Khale

ดังนั้นแก้ไขคำตอบของคุณ?
Govind Rai

แก้ไขแล้ว @GovindRai
Akshay Khale

"var_dump ไม่สามารถคืนค่าใด ๆ " หรือไม่ ใช่มันสามารถ Kinda ob_start(); var_dump($var); $dump=ob_get_clean();
ไซนัส Mackowaty

3

ฉันมักจะแนะนำให้ใส่ผลลัพธ์ของ var_dump () หรือ printr ลงในแท็กล่วงหน้าเมื่อส่งออกไปยังเบราว์เซอร์

print "<pre>";
print_r($dataset);
print "</pre>";

จะให้ผลลัพธ์ที่อ่านง่ายขึ้น


2

var_dump($var) แสดงรายละเอียดเชิงลึกโดยการให้รายละเอียดเพิ่มเติมของ

  • ชนิดข้อมูลของค่า (รวมถึงองค์ประกอบที่สืบทอด)
  • จำนวนองค์ประกอบในตัวแปร
  • ความยาวของค่า

1

ด้วยอาร์เรย์ขนาดใหญ่ print_r สามารถแสดงข้อมูลมากกว่าที่เป็นประโยชน์ คุณสามารถตัดให้สั้นลงได้เช่นนี้โดยแสดงอักขระ 2,000 ตัวแรกหรือหลายตัวก็ได้

  echo "<pre>" . substr(print_r($dataset, 1), 0, 2000) . "</pre>";

1

var_dump (): -

  1. ฟังก์ชันนี้แสดงข้อมูลที่มีโครงสร้างเกี่ยวกับนิพจน์อย่างน้อยหนึ่งนิพจน์ที่มีประเภทและค่า อาร์เรย์และวัตถุจะถูกสำรวจซ้ำด้วยค่าที่เยื้องเพื่อแสดงโครงสร้าง
  2. ฟังก์ชั่นนี้แสดงจำนวนองค์ประกอบในตัวแปร
  3. ฟังก์ชั่นนี้แสดงความยาวของตัวแปร
  4. ไม่สามารถคืนค่าพิมพ์เฉพาะค่า
  5. มันใช้สำหรับวัตถุประสงค์ในการแก้ไขข้อบกพร่อง

ตัวอย่าง: -

<?php
$a = array(1, 2, array("a", "b", "c"));
var_dump($a);
?>

ผลลัพธ์: -

   array(3) {
  [0]=>
  int(1)
  [1]=>
  int(2)
  [2]=>
  array(3) {
    [0]=>
    string(1) "a"
    [1]=>
    string(1) "b"
    [2]=>
    string(1) "c"
  }
}

print_r (): -

  1. พิมพ์ข้อมูลที่มนุษย์สามารถอ่านได้เกี่ยวกับตัวแปร
  2. ไม่แสดงจำนวนองค์ประกอบในตัวแปรเป็น var_dump ()
  3. ไม่แสดงความยาวของตัวแปรในตัวแปรเป็น var_dump ()
  4. ส่งคืนค่าถ้าเราตั้งค่าพารามิเตอร์ที่สองเป็นจริงใน printf_r ()

ตัวอย่าง: -

<pre>
<?php
$a = array ('a' => 'apple', 'b' => 'banana', 'c' => array ('x', 'y', 'z'));
print_r ($a);
?>
</pre>

เอาท์พุท: -

<pre>
Array
(
    [a] => apple
    [b] => banana
    [c] => Array
        (
            [0] => x
            [1] => y
            [2] => z
        )
)
</pre>

"ไม่สามารถคืนค่าพิมพ์เฉพาะค่าได้" ใช่มันสามารถ Kinda ob_start(); var_dump($var); $dump=ob_get_clean();
Sinus Mackowaty

0

print_r () และ var_dump () เป็นฟังก์ชันการดีบัก Array ที่ใช้ใน PHP เพื่อการดีบัก print_r () ฟังก์ชันส่งคืนคีย์อาร์เรย์และสมาชิกเป็น Array ([คีย์] = ค่า) ในขณะที่ฟังก์ชัน var_dump () ส่งกลับรายการอาร์เรย์ด้วยคีย์อาร์เรย์ที่มีชนิดข้อมูลและความยาวเช่น Array (array_length) {[0] = สตริง (1) 'a'}


0

เราสามารถส่งผ่านพารามิเตอร์หลายตัวด้วย var_dump เช่น:

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