简单介绍php构造函数用法

构造函数 和 析构函数

构造函数

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

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

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

<?php
class BaseClass {
  //我是一个父亲的构造函数
   function __construct() {
       print "In BaseClass constructor<br>";
   }
}
 
//我是一个孩子类
class SubClass extends BaseClass {
   function __construct() {//孩子的构造函数
       parent::__construct(); //我执行一次父亲的构造函数先。
       print "In SubClass constructor<br>";
   }
}
 
//我是个孩子,但是我没有自己的构造函数,所以我自动用我父亲的
class OtherSubClass extends BaseClass {
    // inherits BaseClass's constructor
}
 
//我是个孩子,我有自己的构造函数,抛弃父亲的。所以我不执行父亲的构造函数的打印
class OtherSub2Class extends BaseClass {
    // inherits BaseClass's constructor
    function __construct() {//孩子的构造函数
       print "In OtherSub2Class constructor<br>";
   }
}
 
// In BaseClass constructor
$obj = new BaseClass();
 
// In BaseClass constructor
// In SubClass constructor
$obj = new SubClass();
 
// In BaseClass constructor
$obj = new OtherSubClass();
 
$obj = new OtherSub2Class();
 
?>
为了实现向后兼容性,如果 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++。析构函数会在到某个对象的所有引用都被删除或者当对象被显式销毁时执行。

在 php 文件完全执行完毕,这个类会进入销毁,执行一次析构函数,和构造函数,正好相反,构造函数是在创建类的时候进入执行

Example #3 析构函数示例

<?php
class MyDestructableClass {
   function __construct() {
       print "In constructor<br>";
       $this->name = "MyDestructableClass";
   }
 
   function __destruct() {
       print "Destroying " . $this->name . "<br>";
   }
}
 
$obj = new MyDestructableClass();
echo 'i write something <br>';
 
?>
输出

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

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

Note:

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

Note:

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

时间: 2024-09-12 14:56:12

简单介绍php构造函数用法的相关文章

简单介绍如何使用PowerMock和Mockito来mock 1. 构造函数 2. 静态函数 3. 枚举实现的单例 4. 选择参数值做为函数的返回值(转)

本文将简单介绍如何使用PowerMock和Mockito来mock1. 构造函数2. 静态函数3. 枚举实现的单例4. 选择参数值做为函数的返回值5. 在调用mock出来的方法中,改变方法参数的值 一点简要说明:Mockito其实已经可以满足大部分的需求,但是它的实现机制是使用cglib来动态创建接口的类的实例.但是这种实现方式不能用于构造函数和静态函数,因为那需要使用类的字节码(比如使用javassist). 所以我们才需要结合使用PowerMock. 1. mock构造函数, 如果有代码没有

javascript中的location用法简单介绍_基础知识

先前写了一片用window.location.href实现刷新另个框架页面 ,特此我看了一下locaiton的详细用法,对此有点改进,现在我将他整理成js,方便查阅,也贴上和朋友们分享一下,具体如下: 第一.简单介绍一下location属性.用法以及相关示例: Location 包含了关于当前 URL 的信息. 描述 location 对象描述了与一个给定的 Window 对象关联的完整 URL.location 对象的每个属性都描述了 URL 的不同特性. 通常情况下,一个 URL 会有下面的

Android中dumpsys命令用法简单介绍

在Android手机上, 通过使用adb shell命令可以进入android系统的shell, 该shell除支持一些常用的标准命令之外,还支持一些和android系统相关的其他命令, 这些命令可以打印出系统当前的状态信息. dumpsys就是这样一个命令. 使用 adb shell 进入命令行, 敲入dumpsys, 打印出的信息超级多, 在我的nexus 5机器上,输出多达67000行. 首先从打印信息的开始部分看起: Currently running services: Surface

[python知识] 爬虫知识之BeautifulSoup库安装及简单介绍

一. 前言         在前面的几篇文章中我介绍了如何通过Python分析源代码来爬取博客.维基百科InfoBox和图片,其文章链接如下:        [python学习] 简单爬取维基百科程序语言消息盒         [Python学习] 简单网络爬虫抓取博客文章及思想介绍         [python学习] 简单爬取图片网站图库中图片        其中核心代码如下: # coding=utf-8 import urllib import re #下载静态HTML网页 url='h

c#-简单介绍一下C#中的delegate的作用?

问题描述 简单介绍一下C#中的delegate的作用? 就是对C#中delegate的用法不是很清楚,是不是类似于C++中的函数指针 解决方案 给你说一个实例,比如查询一个数据量大约百万的数据表,在查询的过程中界面是会呈现"假死",也就是卡死的状态,直到返回查询结果才恢复. 这时,通常会使用多线程 Thread 来新建一个线程去执行这条语句,这样主界面所在的主线程不会受影响,也就不会出现界面卡死的情况. 说了这么多还没说到deleate,也就是委托.如果子线程在执行的过程中,想要调用主

ssh建隧道简单介绍:科学上网、本地服务穿透到外网、

这几天研究ssh的隧道技术发现几个比较有趣的用法,跟大家分享一下 先介绍本文通过ssh干的事情吧 1. 科学上网: -- 需要一台能ssh到的墙外vps 2. 本地服务穿透到外网: -- 需要一台能ssh到的外网vps 完成上面的功能,需要先看看ssh命令能干什么 一. man ssh 看看ssh命令有哪些选项吧 由于太长,这里只展示本次相关的选项 > man ssh -D [bind_address:]port Specifies a local ``dynamic'' application

Linux curl使用简单介绍

<转自:http://www.cnblogs.com/-clq/archive/2012/01/29/2330827.html> Linux curl使用简单介绍[日期:2008-01-29]     来源:Linux公社  作者:notech Curl是Linux下一个很强大的http命令行工具,其功能十分强大. 1) 二话不说,先从这里开始吧! $ curl http://www.linuxidc.com 回车之后,www.linuxidc.com 的html就稀里哗啦地显示在屏幕上了  

ios开发UI篇—Kvc简单介绍

一.KVC简单介绍 KVC key valued coding 键值编码 KVC通过键值间接编码 补充: 与KVC相对的时KVO,即key valued observer 键值观察.监听某一个模型的属性,只要模型属性的值一变化就通知你. 二.使用KVC 1.KVC基本使用介绍 (1)代码示例: 新建一个命令行项目,用以演示KVC的用法 完成之后为项目添加一个Person类. 为Person类添加两个属性(name和age),注意这两个属性的类型. 1 #import <Foundation/Fo

PHP实现的简单分页类及用法示例_php技巧

本文实例讲述了PHP实现的简单分页类及用法.分享给大家供大家参考,具体如下: <?php /* * 使用: * $page = new Page(连接符,查询语句,当前页码,每页大小,页码符) * 连接符:一个MYSQL连接标识符,如果该参数留空,则使用最近一个连接 * 查询语句:SQL语句 * 当前页码:指定当前是第几页 * 每页大小:每页显示的记录数 * 页码符:指定当前页面URL格式 * * 使用例子: * $sql = "select * from aa"; * $pag