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 相关文章推荐
精通php的十大要点(上)
Feb 04 PHP
基于OpenCV的PHP图像人脸识别技术
Oct 11 PHP
php中使用ExcelFileParser处理excel获得数据(可作批量导入到数据库使用)
Aug 21 PHP
phpcms模块开发之swfupload的使用介绍
Apr 28 PHP
php类常量的使用详解
Jun 08 PHP
解决File size limit exceeded 错误的方法
Jun 14 PHP
php使用codebase生成随机数
Mar 25 PHP
thinkphp使用phpmailer发送邮件的方法
Nov 24 PHP
浅谈php冒泡排序
Dec 30 PHP
thinkPHP删除前弹出确认框的简单实现方法
May 16 PHP
php连接sftp的作用以及实例代码
Sep 23 PHP
ThinkPHP 框架实现的读取excel导入数据库操作示例
Apr 14 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
PHP 的ArrayAccess接口 像数组一样来访问你的PHP对象
2010/10/12 PHP
详解PHP函数 strip_tags 处理字符串缺陷bug
2017/06/11 PHP
PHP全局使用Laravel辅助函数dd
2019/12/26 PHP
PHP单元测试配置与使用方法详解
2019/12/27 PHP
javascript 常用关键字列表集合
2007/12/04 Javascript
js 代码优化点滴记录
2012/02/19 Javascript
最佳6款用于移动网站开发的jQuery 图片滑块插件小结
2012/07/20 Javascript
js判断选择的时间是否大于今天的代码
2013/08/20 Javascript
LABjs、RequireJS、SeaJS的区别
2014/03/04 Javascript
js+cookies实现悬浮购物车的方法
2015/05/25 Javascript
测试IE浏览器对JavaScript的AngularJS的兼容性
2015/06/19 Javascript
JavaScript实现的伸展收缩型菜单代码
2015/10/14 Javascript
jQuery自定义图片缩放拖拽插件imageQ实现方法(附demo源码下载)
2016/05/27 Javascript
jquery mobile界面数据刷新的实现方法
2016/05/28 Javascript
一种Javascript解释ajax返回的json的好方法(推荐)
2016/06/02 Javascript
省市区三级联动jquery实现代码
2020/04/15 Javascript
纯js仿淘宝京东商品放大镜功能
2017/03/02 Javascript
详解vue的数据binding绑定原理
2017/04/12 Javascript
jQuery动态移除与增加onclick属性的方法详解
2018/06/07 jQuery
浅谈vue中document.getElementById()拿到的是原值的问题
2020/07/26 Javascript
[03:01]DOTA2英雄基础教程 露娜
2014/01/07 DOTA
[02:33]2014DOTA2 TI每日综述 LGD涉险晋级DK闯入胜者组
2014/07/14 DOTA
python将ip地址转换成整数的方法
2015/03/17 Python
python opencv读mp4视频的实例
2018/12/07 Python
使用Python OpenCV为CNN增加图像样本的实现
2019/06/10 Python
django 通过URL访问上传的文件方法
2019/07/28 Python
Tensorflow分批量读取数据教程
2020/02/07 Python
新手入门学习python Numpy基础操作
2020/03/02 Python
python实现井字棋小游戏
2020/03/04 Python
盖尔斯工厂店:GUESS Factory
2020/01/21 全球购物
债务追讨授权委托书范本
2014/10/16 职场文书
2016年教师节慰问信
2015/12/01 职场文书
SQL实现LeetCode(175.联合两表)
2021/08/04 MySQL
详解SQL的窗口函数
2022/04/21 Oracle
大脑的记忆过程在做数据压缩,不同图形也有共同的记忆格式
2022/04/29 数码科技
大型强子对撞机再次重启探索“第五种自然力”
2022/04/29 数码科技