析构函数: __destruct()和内存
来源:互联网 发布:淘宝画师招聘 编辑:程序博客网 时间:2024/05/16 06:59
析构函数
构造函数是在对象产生的时候,自动执行
析构函数是在对象销毁的时候,自动执行
构造函数就是出生时啼哭
析构函数就是临终遗言
对象如何销毁?
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()
对象销毁时执行
什么叫对象销毁?
答:
unset($a) 未必销毁了对象.
我们知道, 一个对象如果还有其他变量来引用,unset($a)并不会销毁.
当引用为0时,对象才销毁.
0 0
- 析构函数: __destruct()和内存
- 析构函数 __destruct()
- PHP构造函数__construct和析构函数__destruct
- 构造函数__construct()和析构函数__destruct()
- PHP中的构造函数__CONSTRUCT()和析构函数__DESTRUCT()使用
- php 面向对象中构造函数(__contruct())和析构函数(__destruct())
- 构造函数与析构函数[__construct __destruct()]
- PHP5的72变:__construct与__destruct关键字-构造函数和析构函数--第4变
- 构造方法__construct()与析构方法__destruct()
- c++析构函数和动态内存
- PHP面向对象(OOP)编程完全教程:8.构造方法__construct()与析构方法__destruct()
- PHP面向对象(OOP)编程完全教程:8.构造方法__construct()与析构方法__destruct()
- PHP面向对象(OOP)构造方法__construct()与析构方法__destruct()
- -PHP面向对象(OOP)编程入门-8.构造方法__construct()与析构方法__destruct()
- PHP魔术方法之构造方法__construct与析构方法__destruct
- Php魔术函数学习与应用 __construct() __destruct() __get()等
- Php魔术函数学习与应用 __construct() __destruct() __get()等 .
- Php魔术函数学习与应用 __construct() __destruct()
- hdu 3359 /poj 3999 Kind of a Blur(高斯消元模板题)
- B/S模式的底层socket通讯练习
- Android技术开发之接口回调机制总结
- ppt 制作圆角三角形
- 【杭电oj2029】Palindromes _easy version
- 析构函数: __destruct()和内存
- OpenCV学习笔记之(二):图像的基本操作(VS2010+OpenCV3.0)
- Struts2关于文件上传的案例
- MyBatis学习总结(五)——实现关联表查询
- 【数据库】SQL模糊查询
- 多重背包问题
- 4.canny边缘检测
- 107. Binary Tree Level Order Traversal II
- Asp.net mvc 动作方法中 调用 另一个控制器的动作方法