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的方法的详细内容

  • 相关阅读:
    百度练习题 统计元音字母
    guess number
    LPTHW 结束了
    大坑
    LPTHW 笨办法学python 40章 类
    LPTHW 笨办法学python 37章 python关键字/关键词介绍
    dis进行反编译
    LPTHW 笨办法学python 33章
    eclipse安装详解以及遇到的问题
    安装eclipse错误Could not create the Java virtual machine
  • 原文地址:https://www.cnblogs.com/a609251438/p/12605441.html
Copyright © 2011-2022 走看看