在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 分享