Mục lục
ToggleHàm debug_zval_dump() là hàm để trích xuất một chuỗi đại diện của giá trị Zend nội bộ để hiển thị.
debug_zval_dump ( mixed$variable
[, mixed$variable_n...
] ) : void
variable
cần trích suất.variable_n
là các biến tiếp theo muốn trích suất nếu có.code:
<?php $var1 = 'code tu tam. com'; $var2 = ''; $var2 =& $var1; debug_zval_dump(&$var1); ?>
kết quả:
&string(18) 'code tu tam. com' refcount(4) // Giá trị trả về kiểu bao gồm kiểu dữ liệu string, giá trị của biến, độ dài của giá trị
<?php $var1 = 'codetutam com'; $var2 = ''; $var2 =& $var1; debug_zval_dump($var1); // không thông qua tham chiếu, lần này ?>
kết quả.
string(18) "code tu tam. com" refcount(1) // Kết quả refcount lần này đã khác khi không thông qua tham chiếu.
Tại sao lại là refcount(1)? Bởi vì một bản sao của $ var1 đã được tạo, khi gọi hàm. Hàm này càng trở nên khó hiểu hơn khi một biến có tổng số 1 được thông qua (bằng bản sao / giá trị):
<?php $var1 = 'code tu tam. com'; debug_zval_dump($var1); ?>
Kết quả:
string(18) "code tu tam. com" refcount(2)
Một refcount của 2, ở đây, thực sự là bất ngờ. Đặc biệt nếu bạn xem xét các ví dụ trên. Vì vậy những gì đang xảy ra?
Khi một biến có một tham chiếu duy nhất (thực hiện $ var1 trước khi nó được sử dụng làm đối số cho hàm debug_zval_dump ()), công cụ PHP sẽ tối ưu hóa cách truyền vào hàm. Trong nội bộ, PHP coi $ var1 là một tài liệu tham khảo (và do đó, số tiền được tăng lên) và trong trường hợp đoạn văn theo tham chiếu xảy ra, một bản sao được tạo ra, nhưng chỉ tại thời điểm viết. Điều này được gọi là “bản sao để viết”.
Vì vậy, nếu debug_zval_dump () bước vào để viết tham số duy nhất của nó (và nó không), thì một bản sao được tạo. Cho đến lúc đó, tham số vẫn là tham chiếu, làm cho tổng số tăng lên 2 cho lệnh gọi hàm
Việc thêm “Tham chiếu qua thời gian cuộc gọi” dưới dạng E_DEPRECATED làm cho không thể nhận được số refcount thực sự mà không gặp lỗi, vì <? Php error_Vporting (E_ALL ^ E_DEPRECATED); ?> và thậm chí <? php @debug_zval_dump (& $ foo); ?> không thay đổi bất cứ điều gì.
Các bạn có thể xem chi tiết hơn trên php.net.
Hi vọng với bài viết này, bạn đã hiểu rõ ứng dụng của hàm debug_zval_dump() trong PHP. Nếu bạn thấy bài viết hay và có ý nghĩa hãy like và chia sẻ bài viết này để mọi người cùng nhau học tập nhé.
Cảm ơn các bạn đã ghé thăm codetutam.com
Bình luận: