青风百里

PHP 析构方法(二次学习)
一.特点析构方法没有返回值在销毁对象之前,系统会自动调用析构方法一个类最多只能有一个析构方法析构方法会被自动调用析...
扫描右侧二维码阅读全文
08
2018/09

PHP 析构方法(二次学习)

一.特点

  • 析构方法没有返回值
  • 在销毁对象之前,系统会自动调用析构方法
  • 一个类最多只能有一个析构方法
  • 析构方法会被自动调用
  • 析构方法主要用于销毁资源
  • 析构方法调用顺序是,先创建的对象后被销毁

二.析构方法什么时候会被调用

  • 当程序(进程)退出时
  • 当一个对象称为垃圾对象时,所谓垃圾对象是没有任何变量再引用它
  • 看一段代码
<?php
class Test{
    public $name;

    public function __construct($name){
        $this->name = $name;
    }

    public function __destruct()
    {
        echo "我是".$this->name.",我被销毁了<br>";
    }
}

$t1 = new Test("孙悟空");
$t2 = new Test("猪八戒");
$t3 = new Test("沙僧");

  • 上面创建了3个对象,其中t1最先入栈,t3最后入栈,所以在弹出的时候,t3最先被弹出,t1最后被弹出,所以执行结果是"沙僧"先被销毁,"孙悟空"最后被销毁

  • 再看一段代码
<?php
class Test{
    public $name;

    public function __construct($name){
        $this->name = $name;
    }

    public function __destruct()
    {
        echo "我是".$this->name.",我被销毁了<br>";
    }
}

$t1 = new Test("孙悟空");
$t1 = null;
$t2 = new Test("猪八戒");
$t3 = new Test("沙僧");

  • 这里先把t1置空,那么t1就会先被销毁,所以此时"孙悟空"先被销毁了

  • 再看一段代码
<?php
class Test{
    public $name;

    public function __construct($name){
        $this->name = $name;
    }

    public function __destruct()
    {
        echo "我是".$this->name.",我被销毁了<br>";
    }
}

$t1 = new Test("孙悟空");
$t4 = $t1;
$t1 = null;
$t2 = new Test("猪八戒");
$t3 = new Test("沙僧");

  • 把t1赋值给了t4,虽然t1被销毁了,但是t4依然在引用该对象,所以此时"孙悟空"不会被销毁
Last modification:September 16th, 2018 at 02:56 pm

Leave a Comment