在thinkphp中实现facade的方法

互联网 20-3-31

主要的思想是利用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的方法的详细内容,更多内容请关注技术你好其它相关文章!

来源链接:
免责声明:
1.资讯内容不构成投资建议,投资者应独立决策并自行承担风险
2.本文版权归属原作所有,仅代表作者本人观点,不代表本站的观点或立场
标签: ThinkPHP
上一篇:php获取远程图片并下载保存到本地的方法分析 下一篇:Thinkphp常用配置变量说明

相关资讯