有时候模版里面定义需要写很长的全路径类名,此处提供一个 简易的别名调用代码来规避此问题,缺点就是IDE 代码提示功能就没有了 <?php /** * Facade 包装类 * * 优点: * 使用简单的方式来省掉视图里面长长的命名空间调用,诸如 YII 的模版 * 缺点: * 这么写在 IDE 中会失去代码自动提示的功能,对于 sublime 狗而言貌似不是缺点 * * 使用方法: * ZGFacade::{方法名}( {facade名称}, 参数1, 参数2,...参数n ) * * <code> * // 初始化 * 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); * </code> * @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); } }
相关推荐
goshop-facade-ocr-2.2-SNAPSHOT.jar 发现没有此jar ,就传了
设计模式面面观(13):外观模式(Facade Pattern)-结构型模式 http://blog.csdn.net/fanweiwei/archive/2008/04/17/2299641.aspx
设计模式面面观(14):享元模式(Facade Pattern)-结构型模式 http://blog.csdn.net/fanweiwei/archive/2008/04/25/2326692.aspx
语言:English 幕墙施工-斯德哥尔摩经济高效的幕墙翻新工程。 如今,您可以找到大量的外墙服务。 为了方便我们,建筑师和工程师发明了新的想法和新的设计。 在所有这些之中,选择最佳的一个并不容易。...
贴图素材、可以直接用作贴图、二次贴图、遮罩、污渍、纹理
Digital-Facade-s-Prototype
facade-design-pattern-in-php:学习PHP中的外观设计模式
基于Facade的EJB远程调用技术 基于Facade的EJB远程调用技术
Laravel开发-symfonys-facade 为Laravel框架设计的symfonys立面。
Laravel开发-laravel-facade-dump 创建Laravel立面结构的JSON转储。用于生成最新的备忘单
Laravel开发-facade-resolver 用于将外观名称解析为实际类名的laravel命令
幕墙设计介绍Facade-Introduction.pptx
关于Laravel Laravel是一个具有表达力,优雅语法的Web应用程序框架。 我们认为,发展必须是一种令人愉悦的创造力,才能真正实现。 Laravel减轻了许多Web项目中使用的常见任务,从而减轻了开发过程中的痛苦,例如: ...
session facade:基于在线式银行的应用 session facade 远程调用 EJB
将facade类设置成接口,应用facade模式的一个小程序,易于理解,附带类图
jar包,官方版本,自测可用
jar包,官方版本,自测可用
jar包,官方版本,自测可用
jar包,官方版本,自测可用