PHP类和对象之构造函数和析构函数

PHP5可以在类中使用__construct()定义一个构造函数,具有构造函数的类,会在每次对象创建的时候调用该函数,因此常用来在对象创建的时候进行一些初始化工作。

class Car {
   function __construct() {
       print "构造函数被调用\n";
   }
}
$car = new Car(); //实例化的时候 会自动调用构造函数__construct,这里会输出一个字符串

在子类中如果定义了__construct则不会调用父类的__construct,如果需要同时调用父类的构造函数,需要使用parent::__construct()显式的调用。

class Car {
   function __construct() {
       print "父类构造函数被调用\n";
   }
}
class Truck extends Car {
   function __construct() {
       print "子类构造函数被调用\n";
       parent::__construct();
   }
}
$car = new Truck();

同样,PHP5支持析构函数,使用__destruct()进行定义,析构函数指的是当某个对象的所有引用被删除,或者对象被显式的销毁时会执行的函数。

class Car {
   function __construct() {
       print "构造函数被调用 \n";
   }
   function __destruct() {
       print "析构函数被调用 \n";
   }
}
$car = new Car(); //实例化时会调用构造函数
echo ‘使用后,准备销毁car对象 \n‘;
unset($car); //销毁时会调用析构函数

当PHP代码执行完毕以后,会自动回收与销毁对象,因此一般情况下不需要显式的去销毁对象。

时间: 2024-10-11 00:17:12

PHP类和对象之构造函数和析构函数的相关文章

拷贝构造,深度拷贝,关于delete和default相关的操作,explicit,类赋初值,构造函数和析构函数,成员函数和内联函数,关于内存存储,默认参数,静态函数和普通函数,const函数,友元

 1.拷贝构造 //拷贝构造的规则,有两种方式实现初始化. //1.一个是通过在后面:a(x),b(y)的方式实现初始化. //2.第二种初始化的方式是直接在构造方法里面实现初始化. 案例如下: #include<iostream> //如果声明已经定义,边不会生成 class classA { private: int a; int b; public: //拷贝构造的规则,有两种方式实现初始化 //1.一个是通过在后面:a(x),b(y)的方式实现初始化 //2.第二种初始化的方式是直

18. C# -- 类,接口,构造函数,析构函数,

类和接口的定义: 类用class关键字定义,而接口用Interface关键字定义. 可以使用public , internal 关键字定义类和接口的可访问性: 类可以定义为abstract或sealed,以控制继承性: 父类和父类接口在一个用逗号分隔的列表中指定,放在类或接口名和一个冒号的后面. 在类定义中,只能指定一个父类,且必须是列表中的第一项: 1.       类的定义 2.  抽象类(可继承,不能实例化) 3.  密封类(不可继承) 4.  类的继承 内部类可以继承于一个公共基类,但公

类继承时,构造函数和析构函数的调用次序

比如,apple类是fruit类的子类,当执行apple a("红富士");的时候,将先调用fruit类的构造函数,再调用apple类的构造函数 同理,假设在程序里先后声明了两个apple实例: apple a(“红富士"); apple b("青香蕉"); 当函数退出时,要先销毁b,再销毁a(因为b在栈顶). 而调用析构函数时,先调用apple的析构函数,再调用fruit的析构函数. 综上可见,构造函数和析构函数的调用次序恰好反了个个儿. Java和C+

C++中堆对象的构造函数和析构函数逆向分析

实验环境: 操作系统:Windows XP Professional Service Pack 3 集成开发环境:Microsoft Visual C++ 6.0 构建版本:Debug版本 实验代码: 1 #include <stdio.h> 2 3 class People 4 { 5 public: 6 People() { printf("Constructor!\n"); } 7 ~People() { printf("Destructor!\n"

(C++)C++类继承中的构造函数和析构函数

思想: 在C++的类继承中, 建立对象时,首先调用基类的构造函数,然后在调用下一个派生类的构造函数,依次类推: 析构对象时,其顺序正好与构造相反: 例子: #include <iostream> using namespace std; class Shape{ public: void Draw() {cout<<"Base::Draw()"<<endl;} void Erase() {cout<<"Base::Erase()

PHP对象2: 构造函数与析构函数

当一个对象的所有引用都没有时, 一个对象才消失, 这时才执行析构函数 <?php class firecat{ public $name; function say(){ echo 'I love Perl6!<br/>'; } #构造函数 function __construct(){ echo '一个对象创造了.<br />'; } #析构函数 #没有参数也没返回值 function __destruct(){ echo '一个对象消失了.<br />'; }

字符串类的实现:构造函数、析构函数、复制构造函数和赋值操作符

强调一下几个重点: (1)new 操作符申请内存失败,是抛出异常,并不是返回NULL,若想申请失败返回NULL,需要加 (std::nothrow): (2)使用std::nothrow 需要加头文件 #include<new> (3)使用assert (4)构造函数有参数时最好加默认参数,这样就有默认构造函数了,且不要忘了定义为const (5)赋值操作符函数体if语句中的条件必须是 this != &other,为什么if(*this != other)不行???? 刚想了下原因是

C++:派生类的构造函数和析构函数

4.2 派生类的构造函数和析构函数4.2.1 派生类构造函数和析构函数的执行顺序 通常情况下,当创建派生类对象时,首先执行基类的构造函数,随后再执行派生类的构造函数:当撤销派生类对象时,则先执行派生类的派生类的析构函数,随后再执行基类的析构函数. //例4.5 派生类的构造函数和析构函的执行顺序 #include<iostream> using namespace std; class Base{ //声明基类Base public: Base() { cout<<"Co

《C++ Primer Plus》10.3 类的构造函数和析构函数 学习笔记

10.3.1 声明和定义构造函数构造函数原型:// constructor prototype with some default argumentsStock(const string &co, long n = 0, double pr = 0.0);构造函数定义:// constructor definitionStock::Stock(const string & co, long n, double pr){    company = co;    if (n < 0)