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面向对象的使用教程 简单数据库连接
Nov 25 PHP
PHP截取汉字乱码问题解决方法mb_substr函数的应用
Mar 30 PHP
php利用新浪接口查询ip获取地理位置示例
Jan 20 PHP
一个不易被发现的PHP后门代码解析
Jul 05 PHP
PHP实现获取某个月份周次信息的方法
Aug 11 PHP
PHP入门教程之表单与验证实例详解
Sep 11 PHP
php微信公众号js-sdk开发应用
Nov 28 PHP
PHP钩子与简单分发方式实例分析
Sep 04 PHP
php原生数据库分页的代码实例
Feb 18 PHP
PHP实现批量修改文件名的方法示例
Sep 18 PHP
php模式设计之观察者模式应用实例分析
Sep 25 PHP
yii框架结合charjs统计上一年与当前年数据的方法示例
Apr 04 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框架的性能
2008/01/10 PHP
php分页函数示例代码分享
2014/02/24 PHP
destoon调用自定义模板及样式的公告栏
2014/06/21 PHP
PHP filesize函数用法浅析
2019/02/15 PHP
getElementById在任意一款浏览器中都可以用吗的疑问回复
2007/05/13 Javascript
javascript 隔行换色函数代码
2010/10/24 Javascript
判断对象是否Window的实现代码
2012/01/10 Javascript
dotopAlert 提示用户需安装播放器的代码
2012/09/17 Javascript
js加减乘除丢失精度问题解决方法
2014/05/16 Javascript
angular.foreach 循环方法使用指南
2015/01/06 Javascript
学习Javascript闭包(Closure)知识
2016/08/07 Javascript
KnockoutJS 3.X API 第四章之数据控制流component绑定
2016/10/10 Javascript
vuex实现简易计数器
2016/10/27 Javascript
遍历json 对象的属性并且动态添加属性的实现
2016/12/02 Javascript
微信JSAPI支付操作需要注意的细节
2017/01/10 Javascript
详解angularjs获取元素以及angular.element()用法
2017/07/25 Javascript
2种在vue项目中使用百度地图的简单方法
2018/09/28 Javascript
vue.js中ref和$refs的使用及示例讲解
2019/08/14 Javascript
如何使用Jquery动态生成二级选项列表
2020/02/06 jQuery
python实现可以断点续传和并发的ftp程序
2016/09/13 Python
Django如何开发简单的查询接口详解
2019/05/17 Python
如何使用Python实现斐波那契数列
2019/07/02 Python
Python循环中else,break和continue的用法实例详解
2019/07/11 Python
查看端口并杀进程python脚本代码
2019/12/17 Python
Python下利用BeautifulSoup解析HTML的实现
2020/01/17 Python
pytorch使用tensorboardX进行loss可视化实例
2020/02/24 Python
更新升级python和pip版本后不生效的问题解决
2020/04/17 Python
Python中有几个关键字
2020/06/04 Python
让你相见恨晚的十个Python骚操作
2020/11/18 Python
python opencv图像处理(素描、怀旧、光照、流年、滤镜 原理及实现)
2020/12/10 Python
html如何对span设置宽度
2019/10/30 HTML / CSS
英国时尚配饰、珠宝和服装网站:KJ Beckett
2020/01/23 全球购物
《一株紫丁香》教学反思
2014/02/19 职场文书
企业党建工作汇报材料
2014/08/19 职场文书
创业计划书介绍
2019/04/24 职场文书
利用Redis实现点赞功能的示例代码
2022/06/28 Redis