• 技术文章 >php框架 >ThinkPHP

    在thinkphp中实现facade的方法

    尚2020-03-31 09:21:07转载865

    主要的思想是利用call_user_func_array()和容器结合使用的。

    核心代码,理解都在注释中:

    <?php
    //reqeuestFacade.php
        namespace facade{
            class Request extends Facade{
                public function getFacadeName(){
                    return 'request';
                }
            }
        }
    
    ?>
    
    <?php
    //facade.php
    namespace facade{
        class Facade{
    
            public static function createFacade(){
                $class = static::class; //在这个获取的$class其实是facade\reqeust
                //在这里利用static::得到getFacadeName,返回真正的request的变量名
                $facadeClass = static::getFacadeName();
    
                if ($facadeClass) {
                    $class = $facadeClass;
                } elseif (isset(self::$bind[$class])) {
                    $class = self::$bind[$class];
                }
                //echo $class;
                利用容器去获取reqeust,而不是facade\reqeust
                return \Container::get($class);
            }
        
            public static function __callStatic($method, $params)
            {
                return call_user_func_array([static::createFacade(), $method], $params);
            }
        }
    }
    
    
    ?>

    下面测试代码

    reqeust.php

    <?php
    
    class Request{
        public $name = 'Real Request';
    
        public  function sayName(){
            echo $this->name;
        }
    
    }
    
    ?>

    test.php

    <?php
    
        use facade\Request;
    
        include "Container.php";
        include "Facade.php";
        include "RequestFacade.php";
        include "Request.php";
    
        Request::sayName();
    
    ?>

    推荐教程:thinkphp教程

    以上就是在thinkphp中实现facade的方法的详细内容,更多请关注php中文网其它相关文章!

    声明:本文转载于:segmentfault,如有侵犯,请联系admin@php.cn删除
    专题推荐:thinkphp
    上一篇:Thinkphp常用配置变量说明 下一篇:thinkphp关联模型的使用方法
    大前端线上培训班

    相关文章推荐

    • 详解ThinkPHP中自动验证及验证规则• 关于ThinkPHP composer的安装及图像处理类库加载的介绍• ThinkPHP的几种路由形式总结• ThinkPHP中的fetchSql方法的使用

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网