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下escape解码函数的实现方法
Aug 08 PHP
纯php打造的tab选项卡效果代码(不用js)
Dec 29 PHP
php中的注释、变量、数组、常量、函数应用介绍
Nov 16 PHP
php获取数组长度的方法(有实例)
Oct 27 PHP
PHP使用imagick读取PDF生成png缩略图的两种方法
Mar 20 PHP
PHP数组和explode函数示例总结
May 08 PHP
php 数组字符串搜索array_search技巧
Jul 05 PHP
Yii视图操作之自定义分页实现方法
Jul 14 PHP
简单的自定义php模板引擎
Aug 26 PHP
PHP递归获取目录内所有文件的实现方法
Nov 01 PHP
PHP实现可精确验证身份证号码的工具类示例
May 31 PHP
PHP接入微信H5支付的方法示例
Oct 28 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
根德Grundig S400/S500/S700电路分析
2021/03/02 无线电
php 计划任务 检测用户连接状态
2012/03/29 PHP
使用php语句将数据库*.sql文件导入数据库
2014/05/05 PHP
简单谈谈PHP中strlen 函数
2016/02/27 PHP
javascript事件模型代码
2007/07/01 Javascript
JavaScript 计算当天是本年本月的第几周
2009/03/22 Javascript
Dojo 学习要点
2010/09/03 Javascript
刷新页面的几种方法小结(JS,ASP.NET)
2014/01/07 Javascript
window.open()实现post传递参数
2015/03/12 Javascript
JavaScript电子时钟倒计时第二款
2016/01/10 Javascript
浅谈Sticky组件的改进实现
2016/03/22 Javascript
jQuery获取cookie值及删除cookie用法实例
2016/04/15 Javascript
微信小程序开发(一) 微信登录流程详解
2017/01/11 Javascript
无法获取隐藏元素宽度和高度的解决方案
2017/03/07 Javascript
随机生成10个不重复的0-100的数字(实例讲解)
2017/08/16 Javascript
浅谈Vue.js应用的四种AJAX请求数据模式
2017/08/30 Javascript
Python with语句上下文管理器两种实现方法分析
2018/02/09 Python
Python实现拷贝/删除文件夹的方法详解
2018/08/29 Python
PyQt5 实现给窗口设置背景图片的方法
2019/06/13 Python
python集合是否可变总结
2019/06/20 Python
keras-siamese用自己的数据集实现详解
2020/06/10 Python
Python在线和离线安装第三方库的方法
2020/10/31 Python
Pandas的数据过滤实现
2021/01/15 Python
HTML5 Canvas的事件处理介绍
2015/04/24 HTML / CSS
房地产还款计划书
2014/01/10 职场文书
事业单位辞职信范文
2014/01/19 职场文书
自动化毕业生专业自荐书范文
2014/02/04 职场文书
《木笛》教学反思
2014/03/01 职场文书
陈欧广告词
2014/03/14 职场文书
2014年电厂工作总结
2014/12/04 职场文书
新教师个人总结
2015/02/06 职场文书
校本研修个人总结
2015/02/28 职场文书
python opencv人脸识别考勤系统的完整源码
2021/04/26 Python
DjangoRestFramework 使用 simpleJWT 登陆认证完整记录
2021/06/22 Python
中国十大神话动漫电影排行榜 哪吒登顶 白蛇缘起排第七
2022/03/21 国漫
Python使用Opencv打开笔记本电脑摄像头报错解问题及解决
2022/06/21 Python