一个基类User,三个子类GuestUser、CustomerUser、AdminUser,子类将获取父类获取信息的方法(例如:访问Web的权限)子类中可以更新权限,这样设计比较规范,需求增加时可增加附加的用户类型,具体代码如下:
<?php
abstract class User{
protected $name = null;
function __construct($name)
{
$this->name = $name;
}
function getName(){
return $this->name;
}
// 权限方法
function hasReadpermission(){
return true;
}
function hasModifypermission(){
return false;
}
function hasDelpermission(){
return false;
}
// 定制的方法
function wantsFlashInterface(){
return true;
}
}
class GuestUser extends User{
}
class CustomerUser extends User{
function hasModifypermission()
{
return true;
}
}
class AdminUser extends User{
function hasModifypermission()
{
return true;
}
function hasDelpermission()
{
return true;
}
function wantsFlashInterface()
{
return false;
}
}
class UserFactory{
private static $user = ["earnest"=>'admin','neil'=>'guest','ivan'=>"customer"];
static function create($name){
if(!isset(self::$user[$name])){
echo $name.'账号不正确!';die;
}
switch (self::$user[$name]){
case 'admin':return new AdminUser($name);break;
case 'guest':return new GuestUser($name);break;
case 'customer':return new CustomerUser($name);break;
}
}
}
function displayPermission(User $obj){
echo $obj->getName().'\'s permission is:<br/>';
echo ' read:'.($obj->hasReadpermission()?'Yes':'No').'<br/>';
echo ' del:'.($obj->hasDelpermission() ?'Yes':'No').'<br/>';
echo ' modify:'.($obj->hasModifypermission()?'Yes':'No').'<br/>';
}
function displayRequirements(User $obj){
if($obj->wantsFlashInterface()){
echo ' '.$obj->getName().'wants flash interface'.'<br/>';
}
}
$logins = array("earnest","neil","ivan",'davis');
foreach ($logins as $login) {
displayPermission(UserFactory::create($login));
displayRequirements(UserFactory::create($login));
}