<?php
abstract class User
{
protected $name;
public function __construct($name)
{
$this->name = $name;
}
public function getName()
{
return $this->name;
}
public function hasReadPermission()
{
return true;
}
public function hasModifyPermission()
{
return false;
}
public function hasDeletePermission()
{
return false;
}
public function wantsFlashInterface()
{
return true;
}
}
class GuestUser extends User
{
}
class CustomerUser extends User
{
public function hasModifyPermission()
{
return true;
}
}
class AdminUser extends User
{
public function hasModifyPermission()
{
return true;
}
public function hasDeletePermission()
{
return true;
}
function wantsFlashInterface()
{
return false;
}
}
class UserFactory
{
private static $users = ['Andi' => 'admin', 'Stig' => 'guest', 'Derick' => 'customer'];
public static function create($name)
{
if (!isset(self::$users[$name])) {
// 报出错误,因为用户不存在
}
switch (self::$users[$name]) {
case "guest": return new GuestUser($name);
case "customer": return new CustomerUser($name);
case "admin": return new AdminUser($name);
default: //报出错误,因为用户类型不存在
}
}
}
function boolToStr($b)
{
if ($b == true) {
return "Yes\n";
} else {
return "No\n";
}
}
function displayPermissions(User $obj)
{
print $obj->getName() . "'s permissions:\n";
print "Read: " . boolToStr($obj->hasReadPermission());
print "Modify: " . boolToStr($obj->hasModifyPermission());
print "Delete: " . boolToStr($obj->hasDeletePermission());
}
function displayRequirements(User $obj)
{
if ($obj->wantsFlashInterface()) {
print $obj->getName() . " requires Flash\n";
}
}
$logins = ["Andi", "Stig", "Derick"];
foreach ($logins as $login) {
displayPermissions(UserFactory::create($login));
displayRequirements(UserFactory::create($login));
}
网友评论