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边学边教》(04.编写简易的通讯录――视频教程1)
Dec 13 PHP
PHP的范围解析操作符(::)的含义分析说明
Jul 03 PHP
利用PHP扩展vld查看PHP opcode操作步骤
Mar 04 PHP
基于php实现长连接的方法与注意事项的问题
May 10 PHP
将CMYK颜色值和RGB颜色相互转换的PHP代码
Jul 28 PHP
php遍历删除整个目录及文件的方法
Mar 13 PHP
PHP+Mysql基于事务处理实现转账功能的方法
Jul 08 PHP
PHP入门教程之操作符与控制结构流程详解
Sep 09 PHP
php进程daemon化的正确实现方法
Sep 06 PHP
PHP PDOStatement::errorCode讲解
Jan 31 PHP
php+mysql开发中的经验与常识小结
Mar 25 PHP
如何在centos8自定义目录安装php7.3
Nov 28 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/04/23 PHP
PHP 获取远程网页内容的代码(fopen,curl已测)
2011/06/06 PHP
php导出CSV抽象类实例
2014/09/24 PHP
php源码分析之DZX1.5随机数函数random用法
2015/06/17 PHP
基于ThinkPHP+uploadify+upload+PHPExcel 无刷新导入数据
2015/09/23 PHP
非常重要的php正则表达式详解
2016/01/04 PHP
基于php流程控制语句和循环控制语句(讲解)
2017/10/23 PHP
PhpStorm2020 + phpstudyV8 +XDebug的教程详解
2020/09/17 PHP
引用 js在IE与FF之间的区别详细解析
2013/11/20 Javascript
Javascript实现简单的富文本编辑器附演示
2014/06/16 Javascript
JS简单实现浮动窗口效果示例
2016/09/07 Javascript
IntersectionObserver API 详解篇
2016/12/11 Javascript
如何选择适合你的JavaScript框架
2017/11/20 Javascript
浅谈Angular 的变化检测的方法
2018/03/01 Javascript
NodeJS读取分析Nginx错误日志的方法
2019/05/14 NodeJs
js图数据结构处理 迪杰斯特拉算法代码实例
2019/09/11 Javascript
jQuery使用ajax传递json对象到服务端及contentType的用法示例
2020/03/12 jQuery
浅谈vue单页面中有多个echarts图表时的公用代码写法
2020/07/19 Javascript
python实现2014火车票查询代码分享
2014/01/10 Python
python进程类subprocess的一些操作方法例子
2014/11/22 Python
python比较两个列表大小的方法
2015/07/11 Python
pygame实现弹力球及其变速效果
2017/07/03 Python
Python使用sorted排序的方法小结
2017/07/28 Python
Python实现改变与矩形橡胶的线条的颜色代码示例
2018/01/05 Python
python机器学习理论与实战(一)K近邻法
2021/01/28 Python
Python实现屏幕截图的两种方式
2018/02/05 Python
关于python中密码加盐的学习体会小结
2019/07/15 Python
django之导入并执行自定义的函数模块图解
2020/04/01 Python
css3 flex布局 justify-content:space-between 最后一行左对齐
2020/01/02 HTML / CSS
佳能英国官方网站:Canon UK
2017/08/08 全球购物
利达恒信公司.NET笔试题面试题
2016/03/05 面试题
实验室标语
2014/06/21 职场文书
临时用工协议书范本
2014/10/29 职场文书
学术研讨会欢迎词
2015/01/26 职场文书
共青团优秀团员申请书(范文)
2019/08/15 职场文书
go select编译期的优化处理逻辑使用场景分析
2021/06/28 Golang