zoukankan      html  css  js  c++  java
  • 在thinkphp中实现facade的方法

    主要的思想是利用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
    eqeust
    
                //在这里利用static::得到getFacadeName,返回真正的request的变量名
    
                $facadeClass = static::getFacadeName();
    
     
    
                if ($facadeClass) {
    
                    $class = $facadeClass;
    
                } elseif (isset(self::$bind[$class])) {
    
                    $class = self::$bind[$class];
    
                }
    
                //echo $class;
    
                利用容器去获取reqeust,而不是facade
    eqeust
    
                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 facadeRequest;
    
     
    
        include "Container.php";
    
        include "Facade.php";
    
        include "RequestFacade.php";
    
        include "Request.php";
    
     
    
        Request::sayName();
    
     
    
    ?>
    

      

    以上就是在thinkphp中实现facade的方法的详细内容

  • 相关阅读:
    几个基本trick
    CSP2019 树上的树 口胡
    To do List
    对代码风格的探索(持续更新)
    我回来了。
    年度悲剧
    最短路
    平衡树
    线段树-模板
    jmeter断言之JSON Assertion
  • 原文地址:https://www.cnblogs.com/a609251438/p/12605441.html
Copyright © 2011-2022 走看看