PHP中构造函数和析构函数解析


Posted in PHP onOctober 10, 2014

构造函数

void __construct ([ mixed $args [, $... ]] )

PHP 5 允行开发者在一个类中定义一个方法作为构造函数。具有构造函数的类会在每次创建新对象时先调用此方法,所以非常适合在使用对象之前做一些初始化工作。

Note: 如果子类中定义了构造函数则不会隐式调用其父类的构造函数。要执行父类的构造函数,需要在子类的构造函数中调用 parent::__construct()。如果子类没有定义构造函数则会如同一个普通的类方法一样从父类继承(假如没有被定义为 private 的话)。

Example#1使用新标准的构造函数

<?php

class BaseClass {

   function __construct() {

       print "In BaseClass constructor\n";

   }

}

 

class SubClass extends BaseClass {

   function __construct() {

       parent::__construct();

       print "In SubClass constructor\n";

   }

}

 

class OtherSubClass extends BaseClass {

    // inherits BaseClass's constructor

}

 

// In BaseClass constructor

$obj = new BaseClass();

 

// In BaseClass constructor

// In SubClass constructor

$obj = new SubClass();

 

// In BaseClass constructor

$obj = new OtherSubClass();

?>

output:
In BaseClass constructor
In BaseClass constructor
In SubClass constructor
In BaseClass constructor

为了实现向后兼容性,如果 PHP 5 在类中找不到 __construct() 函数并且也没有从父类继承一个的话,它就会尝试寻找旧式的构造函数,也就是和类同名的函数。因此唯一会产生兼容性问题的情况是:类中已有一个名为 __construct() 的方法却被用于其它用途时。

与其它方法不同,当 __construct() 被与父类 __construct() 具有不同参数的方法覆盖时,PHP 不会产生一个 E_STRICT 错误信息。

自 PHP 5.3.3 起,在命名空间中,与类名同名的方法不再作为构造函数。这一改变不影响不在命名空间中的类。

Example#2 Constructors in namespaced classes

<?php

namespace Foo;

class Bar {

    public function Bar() {

        // treated as constructor in PHP 5.3.0-5.3.2

        // treated as regular method as of PHP 5.3.3

    }

}

?>

析构函数

void __destruct(void)

PHP 5 引入了析构函数的概念,这类似于其它面向对象的语言,如 C++。析构函数会在到某个对象的所有引用都被删除或者当对象被显式销毁时执行。

Example#3析构函数示例

<?php

class MyDestructableClass {

   function __construct() {

       print "In constructor\n";

       $this->name = "MyDestructableClass";

   }
   function __destruct() {

       print "Destroying " . $this->name . "\n";

   }

}
$obj = new MyDestructableClass();

?>

和构造函数一样,父类的析构函数不会被引擎暗中调用。要执行父类的析构函数,必须在子类的析构函数体中显式调用 parent::__destruct()。此外也和构造函数一样,子类如果自己没有定义析构函数则会继承父类的。

析构函数即使在使用 exit() 终止脚本运行时也会被调用。在析构函数中调用 exit() 将会中止其余关闭操作的运行。

Note:
析构函数在脚本关闭时调用,此时所有的 HTTP 头信息已经发出。脚本关闭时的工作目录有可能和在 SAPI(如 apache)中时不同。
Note:
试图在析构函数(在脚本终止时被调用)中抛出一个异常会导致致命错误。

PHP 相关文章推荐
Zend引擎的发展 [15]
Oct 09 PHP
隐藏X-Space个人空间下方版权方法隐藏X-Space个人空间标题隐藏X-Space个人空间管理版权方法
Feb 22 PHP
一周让你学会PHP 不错的学习资料
Feb 06 PHP
php和javascript之间变量的传递实现代码
Dec 19 PHP
怎样给PHP源代码加密?PHP二进制加密与解密的解决办法
Apr 22 PHP
PHP统计nginx访问日志中的搜索引擎抓取404链接页面路径
Jun 30 PHP
php数组操作之键名比较与差集、交集赋值的方法
Nov 10 PHP
简单理解PHP的面向对象编程方式
May 17 PHP
php图片添加水印例子
Jul 20 PHP
Smarty日期时间操作方法示例
Nov 15 PHP
PHP制作登录异常ip检测功能的实例代码
Nov 16 PHP
win7 wamp 64位 php环境开启curl服务遇到的问题及解决方法
Sep 16 PHP
Javascript与PHP验证用户输入URL地址是否正确
Oct 09 #PHP
php返回json数据函数实例
Oct 09 #PHP
php常用的安全过滤函数集锦
Oct 09 #PHP
自定义session存储机制避免会话保持问题
Oct 08 #PHP
PHP定时任务延缓执行的实现
Oct 08 #PHP
在Win7 中为php扩展配置Xcache
Oct 08 #PHP
在win7中搭建Linux+PHP 开发环境
Oct 08 #PHP
You might like
PHP的栏目导航程序
2006/10/09 PHP
如何利用php+mysql保存和输出文件
2006/10/09 PHP
thinkphp在低版本Nginx 下支持PATHINFO的方法分享
2016/05/27 PHP
浅谈laravel框架sql中groupBy之后排序的问题
2019/10/17 PHP
JavaScript QueryString解析类代码
2010/01/17 Javascript
jQuery 学习第五课 Ajax 使用说明
2010/05/17 Javascript
(function($){...})(jQuery)的意思
2010/07/22 Javascript
js对象之JS入门之Array对象操作小结
2011/01/09 Javascript
JavaScript 实现鼠标拖动元素实例代码
2014/02/24 Javascript
js通过location.search来获取页面传来的参数
2014/09/11 Javascript
Javascript限制网页只能在微信内置浏览器中访问
2014/11/09 Javascript
js分页工具实例
2015/01/28 Javascript
javascript的变量、传值、传址、参数之间关系
2015/07/26 Javascript
jQuery用户头像裁剪插件cropbox.js使用详解
2017/06/07 jQuery
Vue之Vue.set动态新增对象属性方法
2018/02/23 Javascript
浅谈webpack和webpack-cli模块源码分析
2020/01/19 Javascript
[45:25]完美世界DOTA2联赛循环赛 PXG vs IO 第一场 11.06
2020/11/09 DOTA
python实现超简单端口转发的方法
2015/03/13 Python
Python简单进程锁代码实例
2015/04/27 Python
详解Django中的权限和组以及消息
2015/07/23 Python
人生苦短我用python python如何快速入门?
2018/03/12 Python
Pycharm无法显示动态图片的解决方法
2018/10/28 Python
详解python中list的使用
2019/03/15 Python
Pycharm新建模板默认添加个人信息的实例
2019/07/15 Python
DataFrame.groupby()所见的各种用法详解
2020/06/14 Python
真正了解CSS3背景下的@font face规则
2017/05/04 HTML / CSS
布里斯班女装时尚品牌:Adrift
2017/12/28 全球购物
毕业生幼师求职自荐信
2013/10/01 职场文书
旅游与酒店管理的自我评价分享
2013/11/03 职场文书
麦当劳辞职信范文
2014/01/18 职场文书
自行车租赁公司创业计划书
2014/01/28 职场文书
班级德育工作实施方案
2014/02/21 职场文书
小学生国庆节演讲稿
2014/09/05 职场文书
党的群众路线教育实践活动个人对照检查材料范文
2014/09/25 职场文书
2015年植树节活动总结
2015/02/06 职场文书
婚礼长辈答谢词
2015/09/29 职场文书