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 相关文章推荐
Oracle Faq(Oracle的版本)
Oct 09 PHP
MySQL中create table语句的基本语法是
Jan 15 PHP
PHP iconv 解决utf-8和gb2312编码转换问题
Apr 12 PHP
使用bcompiler对PHP文件进行加密的代码
Aug 29 PHP
解析thinkphp import 文件内容变量失效的问题
Jun 20 PHP
php生成数组的使用示例 php全组合算法
Jan 16 PHP
Laravel中使用FormRequest进行表单验证方法及问题汇总
Jun 19 PHP
php array_map使用自定义的函数处理数组中的每个值
Oct 26 PHP
PHP magento后台无法登录问题解决方法
Nov 24 PHP
PHP命名空间namespace及use的简单用法分析
Aug 03 PHP
使用PHPWord生成word文档的方法详解
Jun 06 PHP
php新建文件的方法实例
Sep 26 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
PHP5 面向对象(学习记录)
2009/12/02 PHP
使用php shell命令合并图片的代码
2011/06/23 PHP
PHP遍历数组的几种方法
2012/03/22 PHP
php的hash算法介绍
2014/02/13 PHP
php实现遍历多维数组的方法
2015/11/25 PHP
php编程中echo用逗号和用点号连接的区别
2016/03/26 PHP
PHP基于pdo的数据库操作类【可支持mysql、sqlserver及oracle】
2018/05/21 PHP
层序遍历在ExtJs的TreePanel中的应用
2009/10/16 Javascript
jQuery 学习入门篇附实例代码
2010/03/16 Javascript
jquery的flexigrid无法显示数据提示获取到数据
2013/07/19 Javascript
js中使用replace方法完成某个字符的转换
2014/08/20 Javascript
JavaScript对象反射用法实例
2015/04/17 Javascript
javascript实现简单的分页特效
2015/08/12 Javascript
jquery专业的导航菜单特效代码分享
2015/08/29 Javascript
jquery编写Tab选项卡滚动导航切换特效
2020/07/17 Javascript
Vue2.0使用过程常见的一些问题总结学习
2017/04/10 Javascript
Vue异步加载about组件
2017/10/31 Javascript
JS+canvas画一个圆锥实例代码
2017/12/13 Javascript
React中this丢失的四种解决方法
2019/03/12 Javascript
JS中的函数与对象的创建方式
2019/05/12 Javascript
vue实现点击按钮下载文件功能
2019/10/11 Javascript
taro小程序添加骨架屏的实现代码
2019/11/15 Javascript
vue基于better-scroll仿京东分类列表
2020/06/30 Javascript
Python爬虫框架Scrapy实例代码
2018/03/04 Python
python实现监控某个服务 服务崩溃即发送邮件报告
2018/06/21 Python
浅谈PyQt5 的帮助文档查找方法,可以查看每个类的方法
2019/06/25 Python
对python while循环和双重循环的实例详解
2019/08/23 Python
Keras实现支持masking的Flatten层代码
2020/06/16 Python
收集的22款给力的HTML5和CSS3帮助工具
2012/09/14 HTML / CSS
网络安全方面的面试题
2015/11/04 面试题
聊城大学毕业生自荐书
2014/02/01 职场文书
奉献家乡演讲稿
2014/09/16 职场文书
婚礼领导致辞大全
2015/07/28 职场文书
导游词之潮音寺
2019/09/26 职场文书
创业计划书之网络外卖
2019/10/31 职场文书
vue特效之翻牌动画
2022/04/20 Vue.js