在thinkphp中实现facade的方法

在thinkphp中实现facade的方法

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

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

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

下面测试代码

reqeust.php

立即学习PHP免费学习笔记(深入)”;

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

test.php

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

推荐教程:thinkphp教程

以上就是在

© 版权声明
THE END
喜欢就支持一下吧
点赞15 分享