PHP中的魔术方法

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

 代码

<? php
    
interface  Accountable
    {
        
const  ERR_MSG  =   " error " ;
        
public   function  isLoggedIn();
        
public   function  getAccount( $user   =   '' );
    }
    
abstract   class  Authentication  implements  Accountable
    {
        
private   $account   =   null ;
        
public   function  getAccount( $user   =   '' )
        {
            
if  ( $this -> account  !=   null ) {
                
return   $this -> account;
            } 
else  {
                
return  ERR_MSG;
            }
        }
        
public   function  isLoggedIn()
        {
            
return  ( $this -> account  !=   null );
        }
    }
    
class  Users
    {
        
private   static   $accounts   =   array ( ' phinecos '   =>   ' phine ' ,
                                         
' guest '      =>   ' guest '
                                         );
        
public   static   function  validates( $user ,   $passwd )
        {
            
return  self :: $accounts [ $user ==   $passwd ;
        }
        
public   function  __call( $name ,   array   $arguments )
        {
            
if  ( preg_match ( " /^validates(.*)$/ " ,   $name ,   $matches &&   count ( $arguments >   0 ) {
                
return  self :: validates( $matches [ 1 ] ,   $arguments [ 0 ]);
            }
        }
    }
    
class  MyAuth  extends  Authentication
    {
        
private   $users ;
        
public   function  __construct()
        {
            
$this -> users  =   new  Users();
        }
        
public   function  login( $user ,   $passwd )
        {
            
if  ( empty ( $user ||   empty ( $passwd ))  return   false ;
            
$firstValidation   =  Users :: validates( $user ,   $passwd );
            
$userFunction   =   ' validates ' . $user ;
            
$secondValidation   =   $this -> users -> $userFunction ( $passwd );
            
return  ( $firstValidation   &&   $secondValidation );
        }
    }
    
function  main()
    {
        
$authenticator   =   new  MyAuth();
        
$user   =   ' phinecos ' ;
        
$pwd   =   ' phine ' ;
        
$isValid   =   $authenticator -> login( $user ,   $pwd );
        
if  ( $isValid ) {
            
echo   ' valid user ' ;
        } 
else  {
            
echo   ' invalid user ' ;
        }
    }
    main();
?>

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值