开发者社区> 嗯哼9925> 正文

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,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
PHP魔术方法知识点整理
构造函数和析构函数 __construct() 构造函数
32 0
PHP几种常见魔术方法与魔术变量解析
PHP几种常见魔术方法与魔术变量解析 先不多说,直接上代码,如下: 1 class Demo 2 { 3 private $str = 'str'; 4 5 //实例化时自动加载function 6 public function __constru.
1212 0
PHP 魔术变量
PHP 魔术变量 PHP 向它运行的任何脚本提供了大量的预定义常量。 不过很多常量都是由不同的扩展库定义的,只有在加载了这些扩展库时才会出现,或者动态加载后,或者在编译时已经包括进去了。 有八个魔术常量它们的值随着它们在代码中的位置改变而改变。
804 0
PHP5中魔术方法
魔术函数 1。__construct() 实例化对象时被调用, 当__construct和以类名为函数名的函数同时存在时,__construct将被调用,另一个不被调用。 2。__destruct() 当删除一个对象或对象操作终止时被调用。
916 0
PHP为什么可以连接MySQL?底层原理是什么?
PHP为什么可以连接MySQL?底层原理是什么?
75 0
php为什么选mysql作为数据库?
php为什么选mysql作为数据库?
30 0
+关注
嗯哼9925
文章
问答
视频
文章排行榜
最热
最新
相关电子书
更多
PHP 2017.北京 全球开发者大会——高可用的PHP
立即下载
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
相关实验场景
更多