构造函数

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

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(); ?>

output: In BaseClass constructor In BaseClass constructor In SubClass constructor In BaseClass constructor

为了实现向后兼容性,如果 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     } } ?>

析构函数

void __destruct(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中构造函数和析构函数解析的更多相关文章

  1. (转)PHP中构造函数和析构函数解析

    --http://www.jb51.net/article/56047.htm 构造函数 void __construct ([ mixed $args [, $... ]] ) PHP 5 允行开发 ...

  2. (转载)C++中, 构造函数和析构函数能不能被显示调用?

    (转载)http://blog.csdn.net/zhangxinrun/article/details/6056321 代码: view plaincopy to clipboardprint?#i ...

  3. C++学习笔记(7)----类的数组中构造函数和析构函数的调用顺序

    C++类的数组中构造函数和析构函数的调用顺序(2) 对于如下的代码: #include<iostream> using namespace std; class CBase { priva ...

  4. 显示调用C++中构造函数和析构函数(有什么弊端)

    1.C++中, 构造函数和析构函数可以被显示调用. 显示调用默认构造函数的语法: a.A::A();(不能写成a.A();) , 显示调用非默认构造函数的语法: a.A::A(7);(不能写成a.A( ...

  5. C++C++中构造函数与析构函数的调用顺序

    http://blog.csdn.net/xw13106209/article/details/6899370 1.参考文献 参考1: C++继承中构造函数.析构函数调用顺序及虚函数的动态绑定 参考2 ...

  6. C++中构造函数和析构函数的调用顺序

    一般而言,析构函数调用的顺序和构造函数调用顺序相反,但是,对象的存储类别可以改变调用析构函数的顺序.举例说明: CreateAndDestroy类的定义 CreateAndDestroy类的成员函数的 ...

  7. C#中构造函数和析构函数的用法

    构造函数与析构函数是一个类中看似较为简单的两类函数,但在实际运用过程中总会出现一些意想不到的运行错误.本文将较系统的介绍构造函数与析构函数的原理及在C#中的运用,以及在使用过程中需要注意的若干事项.一 ...

  8. c++中构造函数与析构函数

    构造函数与析构函数 构造函数与析构函数1. 构造函数2. 析构函数3. 拷贝函数4. 总结 在c++中有2个特殊的函数:构造函数和析构函数,它们分别对类对象进行初始化和清理工作. 1. 构造函数 构造 ...

  9. C/C++中构造函数和析构函数能否被继承

    http://bbs.csdn.net/topics/390160673 标准方面做了要求的.Even though destructors are not inherited 构造函数和析构函数是不 ...

随机推荐

  1. Javascript中的window.event.keyCode使用介绍

    <body onkeydown=" alert(window.event.keyCode)"> <body onkeydown="if(window.e ...

  2. 电力项目七--js控制文字内容过长的显示和文本字数的显示

    当文本框中文字内容过长时,需要调整显示的样式 如上图所示的样式 对应的代码为: <div id="showInfomation" style="visibility ...

  3. ubuntu安装Docker并部署selenium-grid

    目录 一.docker安装 Ubuntu 1.检查内核版本大于3.10 2.更新apt源 3.安装docker 4.(建议)更新成国内源 5.启动.重启docker (可选)检查docker运行情况 ...

  4. DOS和BAT批量提取修改文件名

    DOS命令窗口:开始-cmd-回车,进入DOS命令窗口 案例一.获取文件名 dir 1.输入"文件所在盘",回车,如: d: 2.输入"cd 文件夹位置",回车 ...

  5. react-native 学习(一)

    本包子很久没更新过博客啊... 学习react-native 可以从官网上去学习.但是 目前我看到的中文网和英文网他们初始构建的项目的命令行是不同的. 在中文网上,构建项目的 react-native ...

  6. 如何在ubuntu上搭建服务器并且可以使用ftp上传

    参考: 配置ftp:  http://jingyan.baidu.com/article/67508eb4d6c4fd9ccb1ce470.html 配置ftp这个中把 新建 allowed_user ...

  7. uva656 Optimal Programs

    Optimal Programs As you know, writing programs is often far from being easy. Things become even hard ...

  8. 刚开始学Python,坚持下去

    嗯,刚开始学Python没几天,挺好的一门语言,十分简洁,也很好上手. 坚持下去,每天至少看一个小时的Python.

  9. git学习——<二>git配置文件

    一.git所有配置文件 <一>./etc/gitconfig全局配置文件 修改该配置文件,会对所有用户有影响. 使用git config --system来配置该文件 <二>. ...

  10. opencv 角点检测+相机标定+去畸变+重投影误差计算

    https://blog.csdn.net/u010128736/article/details/52875137 https://blog.csdn.net/h532600610/article/d ...