有時候模版裡面定義需要寫很長的全路徑類名,此處提供一個 簡易的別名調用代碼來規避此問題,缺點就是IDE 代碼提示功能就沒有了 * // 初始化 * ZGFacade::setZGFacade('form', 'Aert_Form'); * ZGFacade::setZGFacade('esClient', '\Elasticsearch\Client'); * * // 使用demo * $form = ZGFacade::newInstance('form', 'frm2', 'delete'); * dump($form); * * echo ZGFacade::server('form', 'REQUEST_METHOD'); * echo ZGFacade::get('form', 'a'); * * $dsn = Config::get('esken.dsn'); * $esClient = ZGFacade::newInstance('esClient', $dsn); * dump($esClient); * * @author vb2005xu@qq.com */final class ZGFacade{private static $map = ['form'=> 'Aert_Form'];public static function setZGFacade($alias, $class){self::$map[ $alias ] = $class;}private static function __facade__($facade, $method, $arguments=[]){if ( is_object($facade) ){// 調用 對象方法return call_user_func_array( [$facade, $method], $arguments );}else if (is_string($facade)){if ( empty(self::$map[$facade]) ){throw new Exception("未定義 'facade': {$facade} ");}// 調用 靜態方法if ( 'newInstance' == $method ) { $class = new ReflectionClass( self::$map[$facade] ); return $class->newInstanceArgs( $arguments ); }$class = self::$map[$facade];return call_user_func_array( [$class, $method], $arguments );}throw new Exception("無效 'facade' 調用!");}public function __call($method, $arguments) { $facade = array_shift($arguments); return self::__facade__($facade, $method, $arguments); } public static function __callStatic($method, $arguments) { $facade = array_shift($arguments); return self::__facade__($facade, $method, $arguments); }}
以上就介紹了Facade 封裝類 -- 解決視圖裡面長長的命名空間調用問題,包括了命名空間,acad方面的內容,希望對PHP教程有興趣的朋友有所協助。