PHP 实例化对象注销

栏目: PHP · 发布时间: 5年前

内容简介:诶呀 , 这个问题说出来有些傻X , 但不测试一下. 写程序心里还是发慌.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$

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


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Is Parallel Programming Hard, And, If So, What Can You Do About

Is Parallel Programming Hard, And, If So, What Can You Do About

Paul E. McKenney

The purpose of this book is to help you understand how to program shared-memory parallel machines without risking your sanity.1 By describing the algorithms and designs that have worked well in the pa......一起来看看 《Is Parallel Programming Hard, And, If So, What Can You Do About 》 这本书的介绍吧!

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具