Phinecos(洞庭散人)

PHP中有下列称之为魔术方法(magic method)的函数:__construct, __destruct , __call, __callStatic,__get, __set, __isset, __unset , __sleep, __wakeup, __toString, __set_state, __clone and __autoload,本文使用__call为实现一个身份验证的简单实例,代码如下:

  
  
  
  
  1. <?php  
  2.     interface Accountable  
  3.     {  
  4.         const ERR_MSG = "error";  
  5.         public function isLoggedIn();  
  6.         public function getAccount($user = '');  
  7.     }  
  8.     abstract class Authentication implements Accountable  
  9.     {  
  10.         private $account = null;  
  11.         public function getAccount($user = '')  
  12.         {  
  13.             if ($this->account != null) {  
  14.                 return $this->account;  
  15.             } else {  
  16.                 return ERR_MSG;  
  17.             }  
  18.         }  
  19.         public function isLoggedIn()  
  20.         {  
  21.             return ($this->account != null);  
  22.         }  
  23.     }  
  24.     class Users  
  25.     {  
  26.         private static $accounts = array('phinecos' => 'phine',  
  27.                                          'guest'    => 'guest' 
  28.                                          );  
  29.         public static function validates($user$passwd)  
  30.         {  
  31.             return self::$accounts[$user] == $passwd;  
  32.         }  
  33.         public function __call($namearray $arguments)  
  34.         {  
  35.             if (preg_match("/^validates(.*)$/"$name$matches) && count($arguments) > 0) {  
  36.                 return self::validates($matches[1], $arguments[0]);  
  37.             }  
  38.         }  
  39.     }  
  40.     class MyAuth extends Authentication  
  41.     {  
  42.         private $users;  
  43.         public function __construct()  
  44.         {  
  45.             $this->users = new Users();  
  46.         }  
  47.         public function login($user$passwd)  
  48.         {  
  49.             if (emptyempty($user) || emptyempty($passwd)) return false;  
  50.             $firstValidation = Users::validates($user$passwd);  
  51.             $userFunction = 'validates'.$user;  
  52.             $secondValidation = $this->users->$userFunction($passwd);  
  53.             return ($firstValidation && $secondValidation);  
  54.         }  
  55.     }  
  56.     function main()  
  57.     {  
  58.         $authenticator = new MyAuth();  
  59.         $user = 'phinecos';  
  60.         $pwd = 'phine';  
  61.         $isValid = $authenticator->login($user$pwd);  
  62.         if ($isValid) {  
  63.             echo 'valid user';  
  64.         } else {  
  65.             echo 'invalid user';  
  66.         }  
  67.     }  
  68.     main();  
  69. ?>  

 

你可能感兴趣的:(职场,休闲,psp)