php基础知识:类与对象(3) 构造函数和析构函数


Posted in PHP onDecember 13, 2006

构造函数
PHP 5 允行开发者在一个类中定义一个方法作为构造函数。具有构造函数的类会在每次创建对象时先调用此方法,所以非常适合在使用对象之前做一些初始化工作。 
注意: 
如果子类中定义了构造函数则不会暗中调用其父类的构造函数。要执行父类的构造函数,需要在子类的构造函数中调用 parent::__construct()。(??和其他语言明显不同??)

例10.8.使用新标准的构造函数
class BaseClass {
  function __construct() {
      print "In BaseClass constructor\n";
  }
}

class SubClass extends BaseClass {
  function __construct() {
      parent::__construct();
      print "In SubClass constructor\n";
  }
}
$obj = new BaseClass();
$obj = new SubClass();

为了实现向后兼容性,如果 PHP 5 在类中找不到 __construct() 函数,它就会尝试寻找旧式的构造函数,也就是和类同名的函数。因此唯一会产生兼容性问题的情况是:类中已有一个名为 __construct() 的方法,但它却又不是构造函数。 

析构函数
PHP 5 引入了析构函数的概念,这类似于其它面向对象的语言,如 C++。析构函数会在到某个对象的所有引用都被删除或者当对象被显式销毁时执行。 
例10.9.析构函数示例
class MyDestructableClass {
  function __construct() {
      print "In constructor\n";
      $this->name = "MyDestructableClass";
  }

  function __destruct() {
      print "Destroying " . $this->name . "\n";
  }
}
$obj = new MyDestructableClass();
和构造函数一样,父类的析构函数不会被引擎暗中调用。要执行父类的析构函数,必须在子类的析构函数体中显式调用 parent::__destruct()。 (??和其他语言明显不同??)
注意: 
析构函数在脚本关闭时调用,此时所有的头信息已经发出。 
注意: 
试图在析构函数中抛出一个异常会导致致命错误。

PHP 相关文章推荐
简单采集了yahoo的一些数据
Feb 14 PHP
PHP 危险函数解释 分析
Apr 22 PHP
PHP 字符串编码截取函数(兼容utf-8和gb2312)
May 02 PHP
php 全局变量范围分析
Aug 07 PHP
PHP-CGI进程CPU 100% 与 file_get_contents 函数的关系分析
Aug 15 PHP
PHP中的正则表达式函数介绍
Feb 27 PHP
Win7下手动安装apache2.2、php5.4笔记
Apr 03 PHP
yii2使用gridView实现下拉列表筛选数据
Apr 10 PHP
Laravel中使用Queue的最基本操作教程
Dec 27 PHP
PHP获取数组中指定的一列实例
Dec 27 PHP
laravel框架查询数据集转为数组的两种方法
Oct 10 PHP
php 多进程编程父进程的阻塞与非阻塞实例分析
Feb 22 PHP
php基础知识:类与对象(2) 自动加载对象
Dec 13 #PHP
php基础知识:类与对象(1)
Dec 13 #PHP
php基础知识:函数基础知识
Dec 13 #PHP
php基础知识:控制结构
Dec 13 #PHP
《PHP边学边教》(04.编写简易的通讯录――视频教程1)
Dec 13 #PHP
IIS+PHP+MySQL+Zend配置 (视频教程)
Dec 13 #PHP
傻瓜化配置PHP环境――Appserv
Dec 13 #PHP
You might like
某大型网络公司应聘时的笔试题目附答案
2008/03/27 PHP
PHP6 mysql连接方式说明
2009/02/09 PHP
ThinkPHP的Widget扩展实例
2014/06/19 PHP
php采用curl实现伪造IP来源的方法
2014/11/21 PHP
php中mysql操作buffer用法详解
2015/03/19 PHP
探究Laravel使用env函数读取环境变量为null的问题
2016/12/06 PHP
关于laravel-admin ueditor 集成并解决刷新的问题
2019/10/21 PHP
php设计模式之组合模式实例详解【星际争霸游戏案例】
2020/03/27 PHP
js更优雅的兼容
2010/08/12 Javascript
仅IE9/10同时支持script元素的onload和onreadystatechange事件分析
2011/04/27 Javascript
javascript数组去掉重复
2011/05/12 Javascript
读jQuery之九 一些瑕疵说明
2011/06/21 Javascript
caller和callee的区别介绍及演示结果
2013/03/10 Javascript
JQuery EasyUI 日期控件如何控制日期选择区间
2014/05/05 Javascript
javascript实现漂亮的拖动层,窗口拖拽特效
2015/04/24 Javascript
Bootstrap中的表单验证插件bootstrapValidator使用方法整理(推荐)
2016/06/21 Javascript
jQuery实现发送验证码并60秒倒计时功能
2016/11/25 Javascript
JS中from 表单序列化提交的代码
2017/01/20 Javascript
Nodejs中Express 常用中间件 body-parser 实现解析
2017/05/22 NodeJs
Angular2.js实现表单验证详解
2017/06/23 Javascript
JS中的算法与数据结构之字典(Dictionary)实例详解
2019/08/20 Javascript
谈谈如何手动释放Python的内存
2016/12/17 Python
Python切片索引用法示例
2018/05/15 Python
Python使用修饰器进行异常日志记录操作示例
2019/03/19 Python
Python提取特定时间段内数据的方法实例
2019/04/01 Python
Pycharm+django2.2+python3.6+MySQL实现简单的考试报名系统
2019/09/05 Python
Pycharm 2020年最新激活码(亲测有效)
2020/09/18 Python
魔声耳机官方网站:Monster是世界第一品牌的高性能耳机
2016/10/26 全球购物
澳大利亚家居用品零售商:Harris Scarfe
2020/10/10 全球购物
护士辞职信模板
2014/01/20 职场文书
安全生产管理责任书
2014/04/16 职场文书
党章培训心得体会
2014/09/04 职场文书
2015年世界无烟日活动总结
2015/02/10 职场文书
劳资员岗位职责
2015/02/13 职场文书
身份证丢失证明
2015/06/19 职场文书
使用canvas仿Echarts实现金字塔图的实例代码
2021/11/11 HTML / CSS