Hàm debug_zval_dump() trong PHP dùng để làm gì ?

22/06/2020 - lượt xem
Chia sẻ
 
Rate this post

Định Nghĩa.

Hà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ị.

Cú pháp.

Cú pháp:

debug_zval_dump ( mixed $variable [, mixed $variable_n... ] ) : void

Trong đó:

  • $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ó.

Ví dụ.

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ị

chú ý.

  • Cẩn thận với Giá trị refcount được trả về bởi hàm này không đáng kể trong các trường hợp nhất định. Ví dụ, một nhà phát triển có thể mong đợi với ví dụ trên có số lần đếm là 2. Tham chiếu thứ ba được tạo khi gọi debug_zval_dump ().
    Hành vi này thậm chí còn tốt hơn khi một biến không được truyền bằng tham chiếu đến hàm debug_zval_dump (). Để minh họa điều này, đây là một phiên bản sửa đổi của ví dụ trên:

    <?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

Hàm liên quan.

Thông tin thêm.

  • Nếu bạn đang tìm cách giải thích về việc đếm refcount  gây nhầm lẫn, tiện ích mở rộng Xdebug cung cấp một hàm tương tự như hàm này, nhưng vì tên biến được truyền dưới dạng chuỗi, xdebug_debug_zval ().
  • 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ì.

  • Lỗi nghiêm trọng: Tham chiếu qua thời gian cuộc gọi đã bị xóa …” kể từ PHP 5. một cái gì đó. Vì vậy, ở ví dụ # 1 thì hiện tại là mã PHP không hợp lệ.

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

    Liên hệ với chúng tôi

    Để lại thông tin để nhận được các bài viết khác

    Rate this post

    Xem thêm nhiều bài tin mới nhất về Kiến thức

    Xem thêm