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 闭包特性在实际应用中的问题
Oct 30 PHP
深入理解PHP原理之Session Gc的一个小概率Notice
Apr 12 PHP
php提示Warning:mysql_fetch_array() expects的解决方法
Dec 16 PHP
PHP批量去除BOM头内容信息代码
Mar 11 PHP
php 无限级分类 获取顶级分类ID
Mar 13 PHP
PHP使用token防止表单重复提交的方法
Apr 07 PHP
Yii2.0 模态弹出框+ajax提交表单
May 22 PHP
PHP自定义图片缩放函数实现等比例不失真缩放的方法
Aug 19 PHP
PHP使用PDO访问oracle数据库的步骤详解
Sep 29 PHP
分享5个非常有用的Laravel Blade指令
May 30 PHP
laravel http 自定义公共验证和响应的方法
Sep 29 PHP
ThinkPHP6.0如何利用自定义验证规则规范的实现登陆
Dec 16 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/25 PHP
PHP实现四种基础排序算法的运行时间比较(推荐)
2016/08/11 PHP
AJAX的使用方法详解
2017/04/29 PHP
laravel按天、按小时,查询数据的实例
2019/10/09 PHP
在 Laravel 中动态隐藏 API 字段的方法
2019/10/25 PHP
JavaScript中的其他对象
2008/01/16 Javascript
jquery的冒泡事件的阻止与允许(三种实现方法)
2013/02/01 Javascript
关闭浏览器输入框自动补齐 兼容IE,FF,Chrome等主流浏览器
2014/02/11 Javascript
node.js中的fs.utimes方法使用说明
2014/12/15 Javascript
js获取内联样式的方法
2015/01/27 Javascript
基于replaceChild制作简单的吞噬特效
2015/09/21 Javascript
angularjs在ng-repeat中使用ng-model遇到的问题
2016/01/21 Javascript
Bootstrap网格系统详解
2016/04/26 Javascript
Node.js Streams文件读写操作详解
2016/07/04 Javascript
纯js实现手风琴效果代码
2020/04/17 Javascript
JS数组返回去重后数据的方法解析
2017/01/03 Javascript
webpack配置sass模块的加载的方法
2017/07/30 Javascript
使用Vue 实现滑动验证码功能
2019/06/27 Javascript
vue 解决异步数据更新问题
2019/10/29 Javascript
解决vue单页面多个组件嵌套监听浏览器窗口变化问题
2020/07/30 Javascript
js实现盒子滚动动画效果
2020/08/09 Javascript
vue 导航锚点_点击平滑滚动,导航栏对应变化详解
2020/08/10 Javascript
[13:40]TI3青蛙君全程回顾 DOTA2我们为梦想再战
2013/09/13 DOTA
[01:11]辉夜杯战队访谈宣传片—CDEC.Y
2015/12/26 DOTA
[49:08]完美世界DOTA2联赛PWL S2 LBZS vs FTD.C 第一场 11.27
2020/12/01 DOTA
python解析xml文件实例分析
2015/05/27 Python
黑科技 Python脚本帮你找出微信上删除你好友的人
2016/01/07 Python
解决pycharm运行出错,代码正确结果不显示的问题
2018/11/30 Python
Python处理session的方法整理
2019/08/29 Python
Python3.6+selenium2.53.6自动化测试_读取excel文件的方法
2019/09/06 Python
python中的split、rsplit、splitlines用法说明
2020/10/23 Python
CSS3色彩模式有哪些?CSS3 HSL色彩模式的定义
2016/04/26 HTML / CSS
html5用video标签流式加载的实现
2020/05/20 HTML / CSS
选秀节目策划方案
2014/06/06 职场文书
Python可变集合和不可变集合的构造方法大全
2021/12/06 Python
解决WINDOWS电脑开机后桌面没有任何图标
2022/04/09 数码科技