构造函数是在对象产生的时候,自动执行 析构函数是在对象销毁的时候,自动执行
构造函数就是出生时啼哭 析构函数就是临终遗言
对象如何销毁? 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 即灰线后面
问: 1、死几次? 2、死在hr下面还是hr上面? 答: 只有一个对象,只死1次;死在系统回收时,即页面执行完毕,因此在灰线下
运行结果;
简单总结: 构造函数 __construct() 在new对象时,自动执行
new 对象时, 1:申请内存,生成对象(属性集合) 2:如果有构造函数,则执行. 3:返回该对象地址
析构函数__destruct() 对象销毁时执行 什么叫对象销毁? 答: a=newHuman(); a 并不是对象,他只是一个变量名,指到对象. unset($a) 未必销毁了对象.
我们知道, 一个对象如果还有其他变量来引用,unset($a)并不会销毁. 当引用为0时,对象才销毁.