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 的 __FILE__ 常量
Jan 15 PHP
php,ajax实现分页
Mar 27 PHP
Apache 配置详解(最好的APACHE配置教程)
Jul 04 PHP
奉献出一个封装的curl函数 便于调用(抓数据专用)
Jul 22 PHP
php中filter函数验证、过滤用户输入的数据
Jan 13 PHP
PHP改进计算字符串相似度的函数similar_text()、levenshtein()
Oct 27 PHP
php中base_convert()进制数字转换函数实例
Nov 20 PHP
利用php输出不同的心形图案
Apr 22 PHP
PHP与jquery实时显示网站在线人数实例详解
Dec 02 PHP
PHP生成唯一ID之SnowFlake算法
Dec 17 PHP
PHP设置Cookie的HTTPONLY属性方法
Feb 09 PHP
PHP随机生成中文段落示例【测试网站内容时使用】
Apr 26 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
ThinkPHP控制器里javascript代码不能执行的解决方法
2014/11/22 PHP
php获取当月最后一天函数分享
2015/02/02 PHP
WordPress开发中用于获取近期文章的PHP函数使用解析
2016/01/05 PHP
PHP实现QQ登录实例代码
2016/01/14 PHP
php用户登录之cookie信息安全分析
2016/05/13 PHP
jQuery+php简单实现全选删除的方法
2016/11/28 PHP
Python中使用django form表单验证的方法
2017/01/16 PHP
PNG背景在不同浏览器下的应用
2009/06/22 Javascript
jquery中的mouseleave和mouseout的区别 模仿下拉框效果
2012/02/07 Javascript
js实现图片放大缩小功能后进行复杂排序的方法
2012/11/08 Javascript
jquery选择器的选择使用及性能介绍
2013/01/16 Javascript
window.open关于浏览器拦截问题分析及解决方法
2013/02/05 Javascript
js或者jquery判断图片是否加载完成实现代码
2013/03/20 Javascript
JS 删除字符串最后一个字符的实现代码
2014/02/20 Javascript
jQuery获取对象简单实现方法小结
2014/10/30 Javascript
Jquery解析json字符串及json数组的方法
2015/05/29 Javascript
使用BootStrap实现表格隔行变色及hover变色并在需要时出现滚动条
2017/01/04 Javascript
Bootstrap实现各种进度条样式详解
2017/04/13 Javascript
JavaScript实现打地鼠小游戏
2020/04/23 Javascript
Vue+Java+Base64实现条码解析的示例
2020/09/23 Javascript
[02:04]2016国际邀请赛中国区预选赛VG.R晋级之路
2016/07/01 DOTA
简介Django框架中可使用的各类缓存
2015/07/23 Python
在Django的模型和公用函数中使用惰性翻译对象
2015/07/27 Python
浅谈Python 集合(set)类型的操作——并交差
2016/06/30 Python
元组列表字典(莫烦python基础)
2019/04/03 Python
大数据分析用java还是Python
2020/07/06 Python
在django中查询获取数据,get, filter,all(),values()操作
2020/08/09 Python
python使用selenium爬虫知乎的方法示例
2020/10/28 Python
python 批量将中文名转换为拼音
2021/02/07 Python
Ibatis如何调用存储过程
2015/05/15 面试题
EJB包括(SessionBean,EntityBean)说出他们的生命周期,及如何管理事务的?
2013/02/17 面试题
仓库组长岗位职责
2014/01/29 职场文书
《世界多美呀》教学反思
2014/03/02 职场文书
2014年司机工作总结
2014/11/21 职场文书
跑出一片天观后感
2015/06/08 职场文书
python Tkinter模块使用方法详解
2022/04/07 Python