Sự khác biệt giữa var_dump, var_export & print_r


126

Sự khác biệt giữa var_dump, var_exportvà là print_rgì?


14
Đôi khi dễ dàng hơn để yêu cầu người khác hiểu rõ hơn sau đó đọc hướng dẫn.
Deepak Lamichhane

11
@ Các câu trả lời thông thường của bạn thường rõ ràng hơn, ngắn gọn hơn, có thể hành động và về cơ bản luôn dễ tham khảo hơn hướng dẫn sử dụng PHP.
Mark Fox

Câu trả lời:


194

var_dump dành cho mục đích gỡ lỗi. var_dumpluôn luôn in kết quả.

// 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 cũng dành cho mục đích gỡ lỗi, nhưng không bao gồm loại của thành viên. Đó là một ý tưởng tốt để sử dụng nếu bạn biết các loại phần tử trong mảng của mình, nhưng có thể gây hiểu nhầm. print_rtheo mặc định in kết quả, nhưng cho phép trả về dưới dạng chuỗi thay vì sử dụng$returntham sốtùy chọn.

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

var_export in mã php hợp lệ. Hữu ích nếu bạn tính toán một số giá trị và muốn kết quả là một hằng số trong tập lệnh khác. Lưu ý rằngvar_exportkhông thể xử lý các chu kỳ tham chiếu / mảng đệ quy, trong khi đóvar_dumpprint_rkiểm tracác mảngnày. var_exporttheo mặc định in kết quả, nhưng cho phép trả về dưới dạng chuỗi thay vì sử dụng$returntham sốtùy chọn.

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

Cá nhân, tôi nghĩ var_exportlà sự thỏa hiệp tốt nhất của súc tích và chính xác.


51
Lưu ý rằng var_export, do bản chất của nó, sẽ chết một cái chết đệ quy khủng khiếp trên, mảng, đệ quy. print_rvar_dump(mặc dù, không hoàn toàn chắc chắn về sau này, vì tôi thường không sử dụng nó) không có vấn đề đó. Vì vậy, không var_export($_GLOBALS);, ví dụ (có chứa chính nó). :)
Pinkgothic

@ftrotter Tôi luôn nghĩ rằng bình luận sẽ giải thích sự tò mò đó tốt, nhưng có bạn đi, thêm một ghi chú ngắn cho câu trả lời.
phihag

1
Cần phải nói thêm rằng bạn có thể khiến print_r () và var_export () trả về một chuỗi thay vì xuất ra nó, trong khi var_dump () không thể làm điều đó. Ngoài ra, tôi không thích var_export () vì nó khó hiểu - nếu bạn cố xuất một số SOMECONST không xác định, bạn sẽ nhận lại chuỗi văn bản 'SOMECONST'. Vì vậy, nó sẽ không nói NULL, 0, "", nhưng thực tế nó sẽ cho rằng đó là một chuỗi (và tôi cho rằng cũng ném một THÔNG BÁO).
dùng

1
var_export tốt cho việc biểu diễn một chuỗi một cách an toàn, như bảo vệ trích dẫn / dấu gạch chéo ngược.
dkellner

1
Cá nhân tôi thích var_dumpđầu ra. Quá tệ, nó không cho phép trả lại đầu ra dưới dạng một chuỗi. Như vậy tôi có thể liên quan đến tình cảm của @ iconoclast trong bình luận ở trên. Nhưng phải chọn var_exporthơn var_dumpđối với trường hợp sử dụng này là chấp nhận được đối với tôi. Để đầy đủ, lưu ý yêu cầu tính năng liên quan này .
Paul van Leeuwen

3

var_dumpvar_exportliên quan như thế này (từ hướng dẫn )

var_export () nhận thông tin có cấu trúc về biến đã cho. Nó tương tự như var_dump () với một ngoại lệ: biểu diễn được trả về là mã PHP hợp lệ.

Chúng khác với print_rviệc var_dumpxuất thêm thông tin, như kiểu dữ liệu và kích thước của các phần tử.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.