LEN

PHP 实例化对象注销
诶呀 , 这个问题说出来有些傻X , 但不测试一下. 写程序心里还是发慌. PHP的内存回收原理, 不多说了 自己...
扫描右侧二维码阅读全文
17
2019/01

PHP 实例化对象注销

诶呀 , 这个问题说出来有些傻X , 但不测试一下. 写程序心里还是发慌.
PHP的内存回收原理, 不多说了 自己看手册. 就是个引用计数器, 变量上没有数量就回收了.
对象也是一样, 当你实例化的对象赋值到变量上, 这个对象的引用关系就赋值到变量上了. 如果重新赋值对象变量, 原有对象也就没有计数了, 也就被注销了.

举个栗子:

<?php

class Obj {

    public function __construct()
    {
        echo __FUNCTION__, PHP_EOL;
    }

    public function __destruct()
    {
        echo __FUNCTION__, PHP_EOL;
    }
}

$data = new Obj();

$i =0 ;
do { 
       if ($i > 3) {
        $data = []; // 注销对象 unset 也 ok 只要计数归零 对象就会注销 (swoole 对象内生成定时器问题 待测试)
    }
    sleep(1);
    echo $i++, PHP_EOL;
} while($i < 5);

运行后输出

localhost:Desktop admin$ php test.php 
__construct
0
1
2
3
__destruct
4
localhost:Desktop admin$ 

答案很明显了, 重新赋值对象变量, 析构函数触发.

Last modification:January 17th, 2019 at 11:48 pm
If you think my article is useful to you, please feel free to appreciate

Leave a Comment