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 相关文章推荐
php self,$this,const,static,-&amp;gt;的使用
Oct 22 PHP
PHP开启gzip页面压缩实例代码
Mar 11 PHP
php用数组返回无限分类的列表数据的代码
Aug 08 PHP
php debug 安装技巧
Apr 30 PHP
php编程实现获取excel文档内容的代码实例
Jun 28 PHP
PHP中让curl支持sock5的代码实例
Jan 21 PHP
PHP设置进度条的方法
Jul 08 PHP
php编程每天必学之验证码
Mar 03 PHP
laravel自定义分页效果
Jul 23 PHP
PHP常用日期加减计算方法实例小结
Jul 31 PHP
PHP asXML()函数讲解
Feb 03 PHP
php二维数组按某个键值排序的实例讲解
Feb 15 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怎样调用MSSQL的存储过程
2006/10/09 PHP
PHP和XSS跨站攻击的防范
2007/04/17 PHP
php数组索引与键值操作技巧实例分析
2015/06/24 PHP
PHP中异常处理的一些方法整理
2015/07/03 PHP
thinkphp实现163、QQ邮箱收发邮件的方法
2015/12/18 PHP
PHP微信PC二维码登陆的实现思路
2017/07/13 PHP
PHP实现基于回溯法求解迷宫问题的方法详解
2017/08/17 PHP
JavaScript中各种编码解码函数的区别和注意事项
2010/08/19 Javascript
按给定几率进行随机抽取的js代码
2010/12/28 Javascript
给页面渲染时间加速 干掉Dom Level 0 Event
2012/12/19 Javascript
jQuery函数的等价原生函数代码示例
2013/05/27 Javascript
JQuery中ajax方法访问web服务实例
2015/07/18 Javascript
AngularJS模块学习之Anchor Scroll
2016/01/19 Javascript
json数据处理及数据绑定
2017/01/25 Javascript
Vue.js实现双向数据绑定方法(表单自动赋值、表单自动取值)
2018/08/27 Javascript
webpack4 处理SCSS的方法示例
2018/09/03 Javascript
详解如何在Javascript中使用Object.freeze()
2020/10/18 Javascript
解决antd datepicker 获取时间默认少8个小时的问题
2020/10/29 Javascript
[02:06]DOTA2肉山黑名单魔法终结者 敌法师中文配音鉴赏
2013/06/17 DOTA
Python FTP操作类代码分享
2014/05/13 Python
python 实现矩阵按对角线打印
2019/11/29 Python
Python tensorflow实现mnist手写数字识别示例【非卷积与卷积实现】
2019/12/19 Python
tensorflow指定CPU与GPU运算的方法实现
2020/04/21 Python
Python学习之路安装pycharm的教程详解
2020/06/17 Python
Perfume’s Club中文官网:西班牙美妆在线零售品牌
2020/08/24 全球购物
颇特女士:NET-A-PORTER(直邮中国)
2020/07/11 全球购物
《在大海中永生》教学反思
2014/02/24 职场文书
副护士长竞聘演讲稿
2014/04/30 职场文书
局火灾防控工作方案
2014/05/25 职场文书
应聘护士求职信
2014/07/21 职场文书
办公室主任岗位职责
2015/01/31 职场文书
党员考试作弊检讨书1000字
2015/02/16 职场文书
2015年领导班子工作总结
2015/05/23 职场文书
生产车间管理制度
2015/08/04 职场文书
演讲稿:​快乐,从不抱怨开始!
2019/04/02 职场文书
nginx 配置缓存
2022/05/11 Servers