<?php //抽象基类User abstract class User { protected $name = NULL; //构造函数 function User($name) { $this->name = $name; //将属性name设置成创建对象时传入的参数 } //获取属性$name function getName() { return $this->name; //返回name属性 } //是否具有浏览权限 function ViewAccess() { return "No"; //抽象基类的浏览权限为No } //是否具有编辑权限 function EditAccess() { return "No"; //抽象基类的编辑权限为No } //是否具有删除权限 function DeleteAccess() { return "No"; //抽象基类的删除权限为No } //是否具有用户管理权限 function ManageAccess() { return "No"; //抽象基类的管理权限为No } } //普通用户 class Client extends User { //重写ViewAccess函数,对普通用户授予浏览权限 function ViewAccess() { return "Yes"; } } //管理员 class Administrator extends User { //重写ViewAccess函数,对普通用户授予浏览权限 function ViewAccess() { return "Yes"; } //重写EditAccess函数,对普通用户授予编辑权限 function EditAccess() { return "Yes"; } //重写DeleteAccess函数,对普通用户授予删除权限 function DeleteAccess() { return "Yes"; } } //维护人员 class Supporter extends User { //重写ViewAccess函数,对普通用户授予浏览权限 function ViewAccess() { return "Yes"; } //重写EditAccess函数,对普通用户授予编辑权限 function EditAccess() { return "Yes"; } //重写DeleteAccess函数,对普通用户授予删除权限 function DeleteAccess() { return "Yes"; } //重写ManageAccess函数,对普通用户授予管理权限 function ManageAccess() { return "Yes"; } } //工厂类 class Factory { //静态成员属性 private static $users = array("Simon"=>"Client", "Elaine"=>"Administrator", "Bob"=>"Supporter"); //创建对象的成员方法 static function Create($name) { //根据成员属性的不同创建不同的对象 switch (self::$users[$name]) { case "Client": return new Client($name); case "Administrator": return new Administrator($name); case "Supporter": return new Supporter($name); } } } //一个存放用户名的数组 $users = array("Elaine", "Simon", "Bob"); //对于每个用户分析其权限 foreach($users as $user) { $obj = Factory::Create($user); //创建对象 echo $obj->getName() . "的权限:/n"; echo "浏览:".$obj->ViewAccess()."/n"; //输出浏览权限 echo "修改:".$obj->EditAccess()."/n"; //输出修改权限 echo "删除:".$obj->DeleteAccess()."/n"; //输出删除权限 echo "管理:".$obj->ManageAccess()."/n"; //输出管理权限 } ?>