9.4构造函数
9.4 构造函数
上面的例子中,对实例$xiaoming的属性$name进行赋值,还需要通过使用接口setname($name)进行操作,如$xiaoming->setname("XiaoMing")。如果想在生成实例$xiaoming的同时就对此实例的属性$name进行赋值,该怎么办呢?
这时就需要构造函数“__construct()”了。这个函数的特性是,当通过关键字new生成实例的时候,它就会被调用执行。
它的用途就是经常对一些属性进行初始化,也就是给一些属性进行初始化的赋值。
以下案例介绍构造函数的使用方法和技巧。
【例9.2】(实例文件:ch10\9.2.php)
<html>
<head>
<title> 构造函数</title>
</head>
<body>
<?php
class guests{
private $name;
private $gender;
function __construct($name,$gender){
$this->name = $name;
$this->gender = $gender;
}
function getname(){
return $this->name;
}
function getgender(){
return $this->gender;
}
};
$xiaoming = new guests("赵大勇","男");
$lili = new guests("方芳芳","女");
echo $xiaoming->getname()."\t".$xiaoming->getgender()."<br />";
echo $lili->getname()."\t".$lili->getgender();
?>
</body>
</html>
运行结果如图9-2所示。

图9-2 程序运行结果
要记住的是,构造函数是不能返回值的。
有构造函数,就有“析构函数”(destructor)。它是在对象被销毁的时候被调用执行的。但是因为PHP在每个请求的最终都会把所有资源释放,所以析构函数的意义是有限的。不过,它在执行某些特定行为时还是有用的,如在对象被销毁时清空资源或者记录日志信息。
以下两种情况destructor可能被调用执行。
(1)代码运行时,当所有的对于某个对象的reference(引用)被毁掉的情况下。
(2)当代码执行到最终,并且PHP停止请求的时候,调用destructor函数。
