跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • PHP 中 Object 为什么需要自身维护一个 refcount?
未分類
30 3 月 2020

PHP 中 Object 为什么需要自身维护一个 refcount?

PHP 中 Object 为什么需要自身维护一个 refcount?

資深大佬 : xiangxihenli 23

刚刚在看鸟哥的深入理解 PHP7 内核之 OBJECT, 里面提到:

zend_object(以下简称 object)在 PHP5 中其实是一种相对特殊的存在, 在 PHP5 中,只有 resource 和 object 是引用传递,也就是说在赋值,传递的时候都是传递的本身,也正因为如此,Object 和 Resource 除了使用了 Zval 的引用计数以外,还采用了一套独立自身的计数系统。

<?php $o1 = new Stdclass(); //o1.refcount == 1, object.refcount == 1 $o2 = $o1; //o1.refcount == o2.refcoun == 2; object.refcount = 1; $o3 = &$o2; //o3.isref == o2.isref==1 //o3.refcount == o2.refcount == 2 //o1.isref == 0; o1.refcount == 1 //object.refcount == 2 

这样,可以让 object 可以保证不同于普通的 zval 的 COW 机制,可以保证 object 可以全局传引用。

实在没想没白为什么需要自身维护一个计数系统?求大神指点..

大佬有話說 (3)

  • 資深大佬 : brzhang

    我想到一个理由,为了自动垃圾回收。引用计数的感觉

  • 主 資深大佬 : xiangxihenli

    @brzhang 嗯?讲讲..我是没有想明白

  • 資深大佬 : zilan

    为了自动 gc
    $a = new StdClass();
    $b = $a; //此时$b 会引用到$a
    某种情况下 unset($a),但此时$b 还在。需要在 Object 中维护一个引用计数,了解目前自身被引用的数量。
    $a 在 gc 时会计算本身的引用计数,从而确认还有没有别的在用,来确认能不能回收。

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具