析构函数:

    xiaoxiao2025-06-22  7

    析构函数

    构造函数是在对象产生的时候,自动执行 析构函数是在对象销毁的时候,自动执行

    构造函数就是出生时啼哭 析构函数就是临终遗言

    对象如何销毁? 1、显式的销毁,unset、赋值为NULL都可以 2、PHP是脚本语言,在代码执行到最后一行的时候,所有申请的都要释放掉 对象占用的内存也要释放,对象就会被销毁了 因此:对于PHP所做的web程序,想犯内存泄露的错误也很难

    class Human{ public $name=null; public $gender=null; public funciton __construct(){ echo "出生了<br/>"; } public function __destruct(){ echo "终究没有逆袭<br/>"; } } $a = new Human(); $b = new Human(); $c = new Human(); $d = new Human(); unset($a); $b = true; // 把对象赋值为其他,也会销毁对象 $c = NULL; // 死3次 echo '<hr />';

    运行结果:

    最后一次销毁,是PHP的页面执行完毕了;最后一行也执行完毕了. 然后系统回收, $d此时才销毁, 因此 显示hr 即灰线后面


    对象的回收机制

    class Human { public $name = '张三'; public $gender = null; public function __destruct() { echo '死了!<br />'; } } $a = new Human(); $b = $c = $d = $a; echo $a->name,'<br />'; echo $b->name,'<br />'; $b->name = '李四'; echo $a->name,'<br />'; echo $b->name,'<br />'; unset($a); // $b,$c,$d在指向对象,因此对象不能销毁. echo '<hr />';

    问: 1、死几次? 2、死在hr下面还是hr上面? 答: 只有一个对象,只死1次;死在系统回收时,即页面执行完毕,因此在灰线下

    再次举例

    class Human { public $name = '张三'; public $gender = null; public function __destruct() { echo '死了!<br />'; } } $e = $f = $g = new Human(); unset($e); //对象并没有销毁 echo 'unset e<br />'; unset($f); //对象并没有销毁 echo 'unset f<br />'; unset($g); //此处执行的析构函数 echo 'unset g<br />'; //析构函数执行之后才执行

    运行结果;

    简单总结: 构造函数 __construct() 在new对象时,自动执行

    new 对象时, 1:申请内存,生成对象(属性集合) 2:如果有构造函数,则执行. 3:返回该对象地址

    析构函数__destruct() 对象销毁时执行 什么叫对象销毁? 答: a=newHuman(); a 并不是对象,他只是一个变量名,指到对象. unset($a) 未必销毁了对象.

    我们知道, 一个对象如果还有其他变量来引用,unset($a)并不会销毁. 当引用为0时,对象才销毁.

    转载请注明原文地址: https://ju.6miu.com/read-1300217.html
    最新回复(0)