PHP 构造函数和析构函数原理与用法分析


Posted in PHP onApril 21, 2020

本文实例讲述了PHP 构造函数和析构函数原理与用法。分享给大家供大家参考,具体如下:

构造函数

__construct ([ mixed $args [, $... ]] ) : void

PHP 5 允行开发者在一个类中定义一个方法作为构造函数。具有构造函数的类会在每次创建新对象时先调用此方法,所以非常适合在使用对象之前做一些初始化工作。

Note: 如果子类中定义了构造函数则不会隐式调用其父类的构造函数。要执行父类的构造函数,需要在子类的构造函数中调用 parent::__construct()。如果子类没有定义构造函数则会如同一个普通的类方法一样从父类继承(假如没有被定义为 private 的话)。

Example #1 使用新标准的构造函数

<?php
class BaseClass {
  function __construct() {
    print "In BaseClass constructor\n";
  }
}

class SubClass extends BaseClass {
  function __construct() {
    parent::__construct();
    print "In SubClass constructor\n";
  }
}

class OtherSubClass extends BaseClass {
  // inherits BaseClass's constructor
}

// In BaseClass constructor
$obj = new BaseClass();

// In BaseClass constructor
// In SubClass constructor
$obj = new SubClass();

// In BaseClass constructor
$obj = new OtherSubClass();
?>

为了实现向后兼容性,如果 PHP 5 在类中找不到 __construct() 函数并且也没有从父类继承一个的话,它就会尝试寻找旧式的构造函数,也就是和类同名的函数。因此唯一会产生兼容性问题的情况是:类中已有一个名为 __construct() 的方法却被用于其它用途时。

与其它方法不同,当 __construct() 被与父类 __construct() 具有不同参数的方法覆盖时,PHP 不会产生一个 E_STRICT错误信息。

自 PHP 5.3.3 起,在命名空间中,与类名同名的方法不再作为构造函数。这一改变不影响不在命名空间中的类。

Example #2 Constructors in namespaced classes

<?php
namespace Foo;
class Bar {
  public function Bar() {
    // treated as constructor in PHP 5.3.0-5.3.2
    // treated as regular method as of PHP 5.3.3
  }
}

析构函数

__destruct ( void ) : void

PHP 5 引入了析构函数的概念,这类似于其它面向对象的语言,如 C++。析构函数会在到某个对象的所有引用都被删除或者当对象被显式销毁时执行。

Example #3 析构函数示例

<?php
class MyDestructableClass {
  function __construct() {
    print "In constructor\n";
    $this->name = "MyDestructableClass";
  }

  function __destruct() {
    print "Destroying " . $this->name . "\n";
  }
}

$obj = new MyDestructableClass();

和构造函数一样,父类的析构函数不会被引擎暗中调用。要执行父类的析构函数,必须在子类的析构函数体中显式调用 parent::__destruct()。此外也和构造函数一样,子类如果自己没有定义析构函数则会继承父类的。

析构函数即使在使用 exit() 终止脚本运行时也会被调用。在析构函数中调用 exit() 将会中止其余关闭操作的运行。

Note:

析构函数在脚本关闭时调用,此时所有的 HTTP 头信息已经发出。脚本关闭时的工作目录有可能和在 SAPI(如 apache)中时不同。

Note:

试图在析构函数(在脚本终止时被调用)中抛出一个异常会导致致命错误。

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
require(),include(),require_once()和include_once()区别
Mar 27 PHP
一步一步学习PHP(4) php 函数 补充2
Feb 15 PHP
兼容firefox,chrome的网页灰度效果
Aug 08 PHP
PHP5.4中json_encode中文转码的变化小结
Jan 30 PHP
PHP中的函数-- foreach()的用法详解
Jun 24 PHP
php图片处理函数获取类型及扩展名实例
Nov 19 PHP
Zend Framework基本页面布局分析
Mar 19 PHP
PHP 的Opcache加速的使用方法
Dec 29 PHP
PHP实现的猴王算法(猴子选大王)示例
Apr 30 PHP
Laravel5.7 Eloquent ORM快速入门详解
Apr 12 PHP
在laravel框架中实现封装公共方法全局调用
Oct 14 PHP
Mac系统下搭建Nginx+php-fpm实例讲解
Dec 15 PHP
PHP 对象继承原理与简单用法示例
Apr 21 #PHP
php判断某个方法是否存在函数function_exists (),method_exists()与is_callable()区别与用法解析
Apr 20 #PHP
ThinkPHP3.1.2 使用cli命令行模式运行的方法
Apr 14 #PHP
Laravel 框架控制器 Controller原理与用法实例分析
Apr 14 #PHP
Laravel 框架路由原理与路由访问实例分析
Apr 14 #PHP
Laravel 框架基于自带的用户系统实现登录注册及错误处理功能分析
Apr 14 #PHP
PHP 范围解析操作符(::)用法分析【访问静态成员和类常量】
Apr 14 #PHP
You might like
怎么样可以把 phpinfo()屏蔽掉?
2006/11/24 PHP
PHP获取文件扩展名的4种方法
2015/11/24 PHP
PHP Filter过滤器全面解析
2016/08/09 PHP
js控制框架刷新
2008/08/01 Javascript
javascript 数组排序函数
2009/08/20 Javascript
javascript+iframe 实现无刷新载入整页的代码
2010/03/17 Javascript
屏蔽F1~F12的快捷键的js函数
2010/05/06 Javascript
JS获取整个页面文档的实现代码
2011/12/15 Javascript
JavaScript 操作table,可以新增行和列并且隔一行换背景色代码分享
2013/07/05 Javascript
瀑布流布局代码一例
2014/04/11 Javascript
js冒泡、捕获事件及阻止冒泡方法详细总结
2014/05/08 Javascript
jquery实现鼠标滑过显示二级下拉菜单效果
2015/08/24 Javascript
JS简单获取及显示当前时间的方法
2016/08/03 Javascript
JS实现图片上传预览功能
2016/11/21 Javascript
Vue.js 2.0中select级联下拉框实例
2017/03/06 Javascript
NodeJS自定义模块写法(详解)
2017/06/27 NodeJs
React中使用async validator进行表单验证的实例代码
2018/08/17 Javascript
搭建vscode+vue环境的详细教程
2020/08/31 Javascript
在Python的Flask框架中构建Web表单的教程
2016/06/04 Python
python初学之用户登录的实现过程(实例讲解)
2017/12/23 Python
python实现求特征选择的信息增益
2018/12/18 Python
使用Python正则表达式操作文本数据的方法
2019/05/14 Python
Python 实现交换矩阵的行示例
2019/06/26 Python
使用python实现滑动验证码功能
2019/08/05 Python
python计算无向图节点度的实例代码
2019/11/22 Python
python动态文本进度条的实例代码
2020/01/22 Python
python GUI库图形界面开发之PyQt5计数器控件QSpinBox详细使用方法与实例
2020/02/28 Python
python 邮件检测工具mmpi的使用
2021/01/04 Python
厕所文明标语
2014/06/11 职场文书
股东出资证明书(正规版)
2014/09/24 职场文书
2014年最新个人对照检查材料范文
2014/09/25 职场文书
县级领导干部开展党的群众路线教育实践活动工作汇报
2014/10/25 职场文书
2014年党的群众路线活动个人整改措施
2014/10/28 职场文书
2014年房地产工作总结范文
2014/11/19 职场文书
2019最新企业员工考勤管理制度(通用版)!
2019/07/02 职场文书
Python爬虫 简单介绍一下Xpath及使用
2022/04/26 Python