面向对象 - 构造方法和析构方法 ¶
作者:KK
发表日期:2017.2.23
类 有两个特殊的方法会在new和unset(或者被自动销毁)的时候被自动调用
构造方法__construct
¶
class User{
public function __construct(){
echo 'user init';
}
}
$user = new User(); // user init
就在User类被new的刻,__construct
方法会被自动调用,通俗的话来讲它就是一个类的初始化方法,专业术语叫构造方法
平时如果想在一个类初始化的时候做点什么事就用这个方法了
更多示例 ¶
通常在初始化一个类的时候就初始化它的数据:
class Girl{
private $_name = ''; //现在业内通常在给非public的属性起名时会加 _ 线开头标注特征,只是命名的一部分,对运行没特殊影响
private $_age = '';
//可以传参数,反正当函数用,就是自动调的
public function __construct($name, $age){
$this->_name = $name;
$this->_age = $age;
}
public function introduce(){
echo '你好,我叫' . $this->_name . ' 年龄大概是' . ($this->_age - 3) . '左右,你猜~';
}
}
$girl1 = new Girl('琳琳', 28); // 传参
$girl2 = new Girl('小舒', 24);
$girl1->introduce();
$girl2->introduce();
析构方法__destruct
¶
这个又叫析构方法
,它没有参数,会在类的实例变量被销毁时自动调用:
class User{
public function __destruct(){
echo '我要被销毁了……';
}
}
$user = new User();
echo 11;
unset($user); // 我要被销毁了……
echo 22;
unset可以销毁一个变量嘛,所以变量被销毁时destruct方法被自动执行了
可是如果删除上面的unset语句还是会被执行,因为PHP脚本跑完的时候,PHP虚拟机会自动删除所有变量,所以也等于自动unset
一个函数结束时也会自动删除变量 ¶
class User{
public function __destruct(){
echo '我要被销毁了……';
}
}
function test(){
$user = new User();
}
echo 11;
test(); // 函数执行完毕退出来的时候,$user变量也会被销毁
echo 22;
实际上__destruct很少使用 ¶
很少程序员有需要在一个类被销毁时做点什么事,但确实也总是有的,在这个阶段就不说了
知道有它的存在就好,有时候会出现在一些面试题目中,不懂就懵了
两个方法都要public ¶
就是指作用域啦,如果你改成private function __construct(){}
就会报错