模拟用户登录验证的案例 依赖注入 Facade

原创 2019-10-31 22:56:26 437
摘要://virefy.php<?php //数据库连接类 class Db{             public $databaseType = null;          

//virefy.php

<?php

 //数据库连接类

class Db{
            public $databaseType = null;

             //获得数据库类型

             public function getType($databaseType){
                            $this->databaseType = $databaseType;
                            return $this;

             }

            //验证数据库类型

             public function conn(){

                             if($this->databaseType == 'mysql'){
                                        return '数据库连接成功';
                            }else{
                                        return '数据库连接失败';
                            }

             }
        }
        //数据库验证类

        class Validate{
                     protected $username;
                     protected $password;

                     //获取数据库用户名和密码

                     public function getValid($username,$password){
                                            $this->username = $username;
                                            $this->password = $password;
                                        return $this;

                     }

                     //验证数据库用户名和密码

                     public function check(){
                                    if($this->username == 'root' && $this->password == 'root'){
                                                return '验证成功'; }else{ return '验证失败';

                                     }

                     }

         }
        //数据显示类

        class User{
                     protected $username;
                     protected $password;

                     //获取用户名和密码

                     public function getUser($username,$password){
                                    $this->username = $username;
                                    $this->password = $password;
                                    return $this;

                     }

                     //验证登录用户名和密码

                     public function login(){

                                     if($this->username == 'admin' && $this->password == 'admin'){

                                             return '用户登录成功';

                                      }else{

                                             return '用户登录失败';

                                     }

                 }
        }


//container.php

<?php

        require 'virefy.php';
        class Container{

             //声明对象数组

             public $instance = [];
            //绑定类

             public function bind($classType,closure $closeFun){
                        $this->instance[$classType] = $closeFun;
            }
            //调用容器绑定类方法

             public function make($classType,$params = []){

                //通过数组赋值的匿名函数返回类对象

                         return call_user_func_array($this->instance[$classType],$params);
            }

     }
        //声时一个容器实例

        $container = new Container;

        //绑定Db

        $container->bind('Db',function(){ return new Db; });

        //绑定Validate

        $container->bind('Validate',function(){ return new Validate; });

        //绑定User $container->bind('User',function(){ return new User; });

        <?php

                require 'container.php';
                class Facade{

                             //声明容器类变量

                             public static $container = null;

                             //构造容器类赋值

                             public static function init(Container $container){
                                            self::$container = $container;

                             }
                            public static function conn($databaseType){
                            //返回Db类conn方法

                             return self::$container->make('Db')->getType($databaseType)->conn();

                            }
                            public static function check($username,$password){
                            //返回Validate类check方法

                             return self::$container->make('Validate')->getValid($username,$password)->check(); }
                            public static function login($username,$password){
                            //返回User类display方法

                             return self::$container->make('User')->getUser($username,$password)->login();

                             }
        }
    //Facade类初始化容器

        Facade::init($container);

    //Facade类验证数据库类型

        echo Facade::conn('mysql').'<br>';

    //Facade类验证数据库用户和密码

        echo Facade::check('root','root').'<br>';

    //Facade类验证登录用户和密码

        echo Facade::login('admin','admin').'<br>';

批改老师:天蓬老师批改时间:2019-11-01 14:41:21
老师总结:这是用最简单的方式在模拟, 实际项目中, 远比这个复杂

发布手记

热门词条