PHP类的构造方法和析构方法

构造方法和析构方法是一种特殊的方法。构造方法,类被实例化时调用,用来给成员属性赋初值,做一些准备工作;析构方法(无参数),在类的实例脱

离其作用域被销毁时调用(自动调用),做一些诸如释放内存等善后工作。


构造方法的语法格式为;

function __construct(){

//方法实现细节

}

因为构造方法是在类被实例化时调用的,因此并不是由实例化的类名加操作符->的形式调用,而是按照如下的语法格式调用:

变量名 = new 类名([构造方法的参数])

注意:如果类中没有构造方法,PHP引擎会自动添加一个构造方法,其参数列表为空,方法内容为空


析构方法在类的实例被销毁时自动调用,且无方法参数,格式如下;

function __destruct(){

//方法实现细节

}

注意:如果类中没有定义析构函数,PHP引擎会自动添加一个析构方法,其方法内容为空


两者结合用法如下;

<?php

class Cat{

function __construct(){

echo '一个绝世的猫诞生了';

}

function __destruct(){

echo '来也匆匆,去也匆匆';

}

}

$c = new Cat();//实例化类,调用无参数的构造方法

//$c被销毁时自动调用析构方法

?>

运行结果如下:

一个绝世的猫诞生了

来也匆匆,去也匆匆


关于构造方法和析构方法,这里还有几点补充说明:

<1>如果子类中没有定义构造方法,则子类在实例化时会默认去 调用父类的构造方法。对于析构方法同样如此,如果子类中没有定义析构方法,则子类的实

例被销毁时会默认调用父类的析构方法

<2>如果子类中定义了构造方法,则子类在实例化不会自动去调用父类的构造方法。对于析构方法同样如此,如果子类中定义了析构方法,则子类的实例化被

销毁的时候不会自动去调用父类的析构方法。

为了在子类中调用父类的构造方法和析构方法,必须按如下语法格式显示调用;

(1)显示调用父类的构造方法

function __construct([子类的构造方法的参数]){     //定义子类的构造方法

…………

parent::__construct([父类的构造方法的参数]);     //显示调用父类的构造方法

…………

}

(2)显示调用父类的析构方法

function __destruct(){     //定义子类的析构方法

…………

parent::__destruct([父类的构造方法的参数]);     //显示调用父类的析构方法

…………

}


用法如下所示:

/**

父类

*/

class Parent{

public $name; //共有属性

private $age; //私有属性


function __construct($name,$age){ //父类的构造方法

$this->name = $name;

$this->age = $age;

}

public function introduceMyself(){ //共有方法

echo '本府'.$this->name.'年方'.$this->age;

}


function __destruct(){ //类的析构方法

echo “来也匆匆,去也匆匆”;

}

}


/**

子类

*/

class Student extends Parent{

public $school; //共有属性


function __construct($name,$age,$school){ //父类的构造方法

parent::__construct($name,$age); //显示调用父类的构造方法

$this->school= $school;

}

public function getSchool(){ //共有方法

echo '俺来自大名鼎鼎的'.$this->school;

}


function __destruct(){ //子类的析构方法

echo “终于可以不用上学了”;

parent::__destruct();   //显示的调用父类的析构方法

}

}


$s = new Student('默默',19,'城管小学'); //实例化子类,调用子类的构造方法

echo ‘本府行不改名坐不改姓,’.$s->name.'是也'; //调用继承自父类的属性

$s->introduceMyself(); //调用继承自父类的方法

$s->getSchool(); //调用子类方法

//$s被销毁,调用子类的析构方法


运行结果如下:

本府行不改名坐不改姓,默默是也

本府默默,年方19

俺来自大名鼎鼎的城管小学

终于可以不用上学了

来也匆匆,去也匆匆

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值