析构函数:当某个对象成为垃圾或者当对象被显式销毁时执行。

GC (Garbage Collector)

在PHP中,没有任何变量指向这个对象时,这个对象就成为垃圾。PHP会将其在内存中销毁。这是PHP的GC (Garbage Collector)垃圾处理机制,防止内存溢出。当一个PHP线程结束时,当前占用的所有内存空间都会被销毁,当前程序中的所有对象同样被销毁。

__destruct() 析构函数,是在垃圾对象被回收时执行。

析构函数也可以被显式调用,但不要这样去做。

析构函数是由系统自动调用的,不要在程序中调用一个对象的析构函数。

析构函数不能带有参数。

程序结束前,所有对象被销毁。析构函数被调用了。

[php] view plain copy
  1. <?php
  2. class Person{
  3. public function __destruct() {
  4. echo "<br />析构函数在这里执行";
  5. echo "<br />这里一般用来放置,关闭数据库,关闭文件等等收尾工作。";
  6. }
  7. }
  8. $p = new Person();
  9. for ($i = 0; $i < 5; $i++) {
  10. echo "<br /> $i";
  11. }
  12. //我们在这里看到,在PHP程序结束前,对象被销毁了。
  13. ?>

当对象没有指向时,对象被销毁。

[php] view plain copy
  1. <?php
  2. class Person {
  3. public function __destruct() {
  4. echo "<br />析构函数在这里执行";
  5. echo "<br />这里一般用来放置,关闭数据库,关闭文件等等收尾工作。";
  6. }
  7. }
  8. $p = new Person();
  9. $p = null;
  10. //我们在这里看到,析构函数在这里被执行了。
  11. for ($i = 0; $i < 5; $i++) {
  12. echo "<br /> $i";
  13. }
  14. ?>

我们将$p设置为空或者第11行赋予$p一个字符串,这样$p之前指向的对象就成为了垃圾对象。PHP将这个对象垃圾销毁。

unset变量

[php] view plain copy
  1. <?php
  2. class Person {
  3. public function __destruct() {
  4. echo "<br />析构函数在这里执行<br />";
  5. }
  6. }
  7. $p = new Person();
  8. $p1 = $p; //设定新引用变量$p1也指向这个对象
  9. unset($p);
  10. echo "是否看到/$p被销毁,对象也被销毁呢?";
  11. for ($i = 0; $i < 5; $i++) {
  12. echo "<br /> $i";
  13. }
  14. unset($p1);
  15. echo "我们看到这里,析构函数被执行了";
  16. ?>

unset一个引用变量时,unset 销毁的是指向对象的变量,而不是这个对象。

来源:http://blog.csdn.net/klinghr/article/details/5208730

PHP类实例教程(七):析构函数与PHP的垃圾回收相关推荐

  1. 七种垃圾收集器和垃圾回收、分代收集、GCROOTS相关概念、GC如何判断一个对象可以被回收

    文章目录 垃圾收集器概述 垃圾回收算法 1)标记-清除算法(Mark-Sweep)(DVM 使用的算法) 2)复制算法(Copying) 3)标记-整理算法(Mark-Compact) 4)分代收集( ...

  2. php 类示例,PHP类实例教程(二十二):类型提示

    PHP是弱类型语言,向方法传递参数时候也不太区分类型.这样的使用会引起很多的问题,PHP开发者认为,这些问题应该是由代码书写者在书写代码时进行检验以避免.没有类型提示很危险. class Normal ...

  3. 实例教程七:在SQLite中使用事务

    系统文件管理器 http://www.eoeandroid.com/thread-128567-1-1.html android 实现区域截图 http://www.eoeandroid.com/th ...

  4. PHP类实例教程(二十):PHP类接口的实现接口

    类实现接口要使用 implements .类实现接口要实现其中的抽象方法.一个类可以实现多个接口. 一个类可以使用 implements 实现接口,甚至可以实现多个接口. 大部分的书说,这样是为了实现 ...

  5. PHP类实例教程(四):PHP5类中的方法

    方法:对对象的属性进行的操作称为对象的方法(也称为行为/操作). 过程 函数 方法 过程:过程是编制程序时定义的一个语句序列,用来完成某种指定的操作. 函数:函数有返回值,也是定义的语句序列. 方法: ...

  6. 【Cocosd2d实例教程七】Cocos2d实现超炫的粒子效果!!

    (转载请注明出处:http://blog.csdn.net/buptgshengod) 1.介绍      你想拥有炫酷的效果么,你想让你的应用亮瞎别人的狗眼么!!不要急,这里告诉大家怎么实现绚丽的粒 ...

  7. 53.垃圾回收算法的实现原理、启动Java垃圾回收、Java垃圾回收过程、垃圾回收中实例的终结、对象什么时候符合垃圾回收的条件、GC Scope 示例程序、GC OutOfMemoryError的示例

    53.垃圾回收算法的实现原理 53.1.目录 53.2.启动Java垃圾回收 53.3.Java垃圾回收过程 53.4.垃圾回收中实例的终结 53.5.对象什么时候符合垃圾回收的条件? 53.5.1. ...

  8. Silverlight实例教程 - 理解Navigation导航框架Frame类

    通过"Navigation导航框架开篇"的介绍,可以了解到Silverlight导航框架可被应用于多种场合,最为常见的是实现Silverlight项目内部页面切换.在Silverl ...

  9. arcgis python实例_arcgis python脚本工具实例教程—栅格范围提取至多边形要素类

    arcgis python脚本工具实例教程-栅格范围提取至多边形要素类 商务合作,科技咨询,版权转让:向日葵,135-4855_4328,xiexiaokui#qq.com 功能:提取栅格数据的范围, ...

最新文章

  1. mysql len s.number,mysql内置函数
  2. 在ubuntu bionic下对基于qemu的arm64进行linux内核5.0.1版本的编译和运行
  3. Ubuntu12.04不能切换输入法
  4. variant php,Variant 是什么数据类型?
  5. Java协作开发,Java开发学习笔记之八:servlet之间的协作
  6. gen_circle_contour_xld创建圆或圆弧的XLD轮廓
  7. 什么甜食可以代表你的家乡?
  8. 守护基于JVM的应用程序
  9. 远程教育英语和计算机没过怎么办,网络教育英语统考能考几次 没考过怎么办?...
  10. CodeIgniter 合作paypal
  11. 安装GD 完美解决make error
  12. es max virtual memory areas vm.max_map_count [65530] likely too low, increase to at least [262144]
  13. r语言 plot_R语言直方图绘制hist(),plot()
  14. MkDocs 文档编辑器
  15. 安川机器人报错_安川机器人报错代码:原点位置数据修改
  16. 建网站应该买什么云服务器,建网站应该买什么云服务器
  17. Python 逐行读取txt文件,批量下载文件
  18. 歌词模拟项目c语言,C语言之歌词解析
  19. 三态门有一个信号控制端en_什么是三态门? 三态逻辑与非门电路以及三态门电路...
  20. 孙源的Runloop视频整理

热门文章

  1. knn人脸识别判断_测试使用K-最近邻(kNN)算法的30个问题
  2. 1.18.2.Table APISQL(概念与通用API、两种计划器(Planner)的主要区别、创建 TableEnvironment、临时表、永久表、创建表、虚拟表、Connector 等)
  3. Spark获取某个手机号在某个基站下停留的时间和当前手机所在的位置的案例
  4. Uboot启动流程分析
  5. C++之变量的作用域,生存期,可见性
  6. [ JavaScript ] 数据结构与算法 —— 链表
  7. C# 多线程之List的线程安全问题
  8. 超简单的视频对象提取程序
  9. 与Netflix合作 美电视运营商推出4K频道
  10. Tomcat+Nginx+Memcached集群部署