2010-07-27 21 views
2

您能否介紹一下如何使用zval容器的實例?我知道的唯一相關功能是debug_zval_dump,但我從來沒有真正使用它。如何在PHP中使用zval?

編輯:

我想,跟蹤的zval容器我可以看到如何優化的代碼,看到內存是如何使用引用。在某些情況下,它似乎可能是有用的工具。 debug_val_dump函數存在肯定有一些很好的理由。

+0

你爲什麼要這樣做? – 2010-07-27 17:03:45

回答

10

每個PHP變量都存儲在zval中,所以你看到你的問題沒有任何意義。

debug_val_dump不是一個非常深思熟慮的功能,因爲它很難解釋。只需將一個變量傳遞給該函數即可更改zval的引用計數。如果您傳遞的是debug_val_dump的引用而不通過引用傳遞它,那麼您將強制執行zval分隔,並且始終會返回一個zval,其引用計數爲1,並且引用標記爲clear,並且如果您通過引用傳遞它(它必須是在通話時間完成,這是棄用),那麼你不能告訴,只是由輸出,如果它最初是一個參考或不。

Xdebug有一個非常有用的函數,當你不傳遞變量的時候,你需要在字符串中傳遞它的名字。它被稱爲xdebug_debug_zval

除非您正在調試使用引用的代碼,並且您想知道有多少變量屬於引用集,否則這些函數可能對您不太有用。

爲了使其具有任何意義,我建議您在手冊中閱讀reference count basics

+3

「除非......」是我感興趣的。我發現這篇文章非常翔實:http://derickrethans.nl/talks/phparch-php-variables-article.pdf – takeshin 2010-08-03 12:24:00

3

你不能真的從PHP本身使用zval's。這是一個核心的實現細節,它不是(通常)從userland php代碼訪問的。