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 和 MySQL 时区的一点总结
Mar 26 PHP
PHP 地址栏信息的获取代码
Jan 07 PHP
深入php socket的讲解与实例分析
Jun 13 PHP
PHP_NETWORK_GETADDRESSES: GETADDRINFO FAILED问题解决办法
May 04 PHP
ThinkPHP学习笔记(一)ThinkPHP部署
Jun 22 PHP
WAMP环境中扩展oracle函数库(oci)
Jun 26 PHP
PHP中SSO Cookie登录分析和实现
Nov 06 PHP
PHP实现上一篇下一篇的方法实例总结
Sep 22 PHP
php实现微信扫码自动登陆与注册功能
Sep 22 PHP
10个值得深思的PHP面试题
Nov 14 PHP
PHP正则匹配操作简单示例【preg_match_all应用】
Jul 10 PHP
PHP实现通过二维数组键值获取一维键名操作示例
Oct 11 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可变函数的使用详解
2013/06/14 PHP
PHP中获取时间的下一周下个月的方法
2014/03/18 PHP
laravel框架实现敏感词汇过滤功能示例
2020/02/15 PHP
php 输出缓冲 Output Control用法实例详解
2020/03/03 PHP
java script编程起步(第三课)
2007/01/10 Javascript
JS解决url传值出现中文乱码的另类办法
2013/04/08 Javascript
解析DHTML,JavaScript,DOM,BOM以及WEB标准的描述
2013/06/19 Javascript
js获取当前日期代码适用于网页头部
2013/06/27 Javascript
简单的邮箱登陆的提示效果类似于yahoo邮箱
2014/02/26 Javascript
jquery UI Datepicker时间控件的使用及问题解决
2016/04/28 Javascript
JS构造函数与原型prototype的区别介绍
2016/07/04 Javascript
jQuery访问浏览器本地存储cookie、localStorage和sessionStorage的基本用法
2017/10/20 jQuery
vue-cli脚手架引入图片的几种方法总结
2018/03/13 Javascript
vue之父子组件间通信实例讲解(props、$ref、$emit)
2018/05/22 Javascript
webpack4与babel配合使es6代码可运行于低版本浏览器的方法
2018/10/12 Javascript
JS异步错误捕获的一些事小结
2019/04/26 Javascript
用Vue.js在浏览器中实现裁剪图像功能
2019/06/18 Javascript
微信小程序实现传递多个参数与事件处理
2019/08/12 Javascript
[01:09:40]Newbee vs Pain 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
python中的列表推导浅析
2014/04/26 Python
python 机器学习之支持向量机非线性回归SVR模型
2019/06/26 Python
浅谈Pandas Series 和 Numpy array中的相同点
2019/06/28 Python
django创建最简单HTML页面跳转方法
2019/08/16 Python
Python3的unicode编码转换成中文的问题及解决方案
2019/12/10 Python
Python print不能立即打印的解决方式
2020/02/19 Python
Python如何定义接口和抽象类
2020/07/28 Python
英国领先的酒类网上商城:TheDrinkShop
2017/03/16 全球购物
Diptyque英国官方网站:源自法国的知名香氛品牌
2019/08/28 全球购物
NHL官方在线商店:Shop.NHL.com
2020/05/01 全球购物
说一下mysql, oracle等常见数据库的分页实现方案
2012/09/29 面试题
护士自我鉴定怎么写
2014/02/07 职场文书
俞敏洪励志演讲稿
2014/04/29 职场文书
优秀电子工程系毕业生求职信
2014/05/24 职场文书
餐饮服务食品安全责任书
2014/07/25 职场文书
Java 异步任务计算FutureTask
2022/04/28 Java/Android
python中使用redis用法详解
2022/12/24 Redis