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();
?>
复制代码



本文转自Phinecos(洞庭散人)博客园博客,原文链接:http://www.cnblogs.com/phinecos/archive/2010/04/19/1715659.html,如需转载请自行联系原作者
目录
相关文章
|
9月前
|
PHP
php开发实战分析(4):php调用封装函数包含文件路径自适应不同目录的解决方案($_SERVER[‘DOCUMENT_ROOT‘]与__DIR__魔术常量)
php开发实战分析(4):php调用封装函数包含文件路径自适应不同目录的解决方案($_SERVER[‘DOCUMENT_ROOT‘]与__DIR__魔术常量)
128 0
|
4月前
|
PHP
PHP 魔幻(术)方法 & 魔术常量
PHP 魔幻(术)方法 & 魔术常量
25 0
|
8月前
|
PHP
PHP 魔幻(术)方法 & 魔术常量
PHP 魔幻(术)方法 & 魔术常量
43 0
|
数据库连接 PHP
PHP魔术方法知识点整理
构造函数和析构函数 __construct() 构造函数
PHP几种常见魔术方法与魔术变量解析
PHP几种常见魔术方法与魔术变量解析 先不多说,直接上代码,如下: 1 class Demo 2 { 3 private $str = 'str'; 4 5 //实例化时自动加载function 6 public function __constru.
1272 0