9.5 访问函数
另外一个很好用的函数是访问函数(accessor)。由于OOP思想并不鼓励直接从类的外部访问类的属性,以强调封装性,所以可以使用__get和__set函数来达到此目的,也就是所说的访问函数。无论何时,类属性被访问和操作,访问函数都会被激发。通过使用它们,可以避免直接对类属性的访问。
以下案例介绍访问函数的使用方法和技巧。
【例9.3】(实例文件:ch10\9.3.php)
<html> <head> <title> 访问函数</title> </head> <body> <?php class guests{ public $property; function __set($propName,$propValue){ $this->$propName = $propValue; } function __get($propName){ return $this->$propName; } }; $xiaoshuai = new guests; $xiaoshuai->name = "刘小帅"; $xiaoshuai->gender = "男性"; $dingdang = new guests; $dingdang->name = "丁叮当"; $dingdang->gender = "女性"; $dingdang->age = 28; echo $xiaoshuai->name." 是 ".$xiaoshuai->gender."<br />"; echo $dingdang->name." 是一位 ".$dingdang->age." 岁 ".$dingdang->gender."<br />"; ?> </body> </html>
运行结果如图9-3所示。
【案例分析】
(1)$xiaoshuai为类guest的实例。直接添加属性name和gender,并且赋值。如$xiaoshuai->name = "刘小帅"; $xiaoshuai->gender = "男性";,此时,类guest中的__set函数被调用。$dingdang实例为同样的过程。另外,$dingdang实例添加了一个对象属性age。
(2)echo命令中使用到的对象属性,如$xiaoshuai->name等,则是调用了类guest中的__get函数。
【讲解知识点】
此例中,__set函数的格式为:
function __set($propName,$propValue){ $this->$propName = $propValue; }
__get函数的格式为:
function __get($propName){ return $this->$propName; }
其中,$propName为“属性名”,$propValue为“属性值”。