9.2 类的声明和实例生成
以下案例介绍类的声明和实例生成,案例中将描述在酒店订房的客人。
【例9.1】(实例文件:ch10\9.1.php)
<html> <head> <title> 类的声明和实例的生成</title> </head> <body> <?php class guests{ private $name; private $gender; function setname($name){ $this->name = $name; } function getname(){ return $this->name; } function setgender($gender){ $this->gender = $gender; } function getgender(){ return $this->gender; } }; $xiaoming = new guests; $xiaoming->setname("王小明"); $xiaoming->setgender("男"); $lili = new guests; $lili->setname("李莉莉"); $lili->setgender("女"); echo $xiaoming->getname()."\t".$xiaoming->getgender()."<br />"; echo $lili->getname()."\t".$lili->getgender(); ?> </body> </html>
运行结果如图9-1所示。
【案例分析】
(1)用class关键字声明一个类,而这个类的名称是guests。在大括号内写入类的属性和方法。其中$name和$gender为类guests的自有属性,用private关键字声明,也就是说只有在类内部的方法可以访问它们,类外部是不能访问的。
(2)setname()、getname()、setgender和getgender()就是类方法,它们可以对$name和$gender这两个属性进行操作。$this是对类本身的引用,用“->”连接类属性,格式如,$this->name,$this->gender。
(3)之后用new关键字生成一个对象,格式为$object = new Classname;,它的对象名是$xiaoming。当程序通过new生成一个类guests的实例,也就是对象$xiaoming的时候,对象$xiaoming就拥有了类guests的所有属性和方法。然后就可以通过“接口”也就是这个对象的方法(也就是类的方法的拷贝)来对对象的属性进行操作。
(4)通过接口setname($name)给实例$xiaoming的属性$name赋值为XiaoMing,通过setgender($gender)给实例$xiaoming的属性$gender赋值为male。同样道理,通过接口操作了实例$lili的属性。最后通过接口getname()和getgender()返回不同的两个实例的属性$name和$gender,并且打印出结果。