• 技术文章 >后端开发 >php教程

    Facade 包装类 -- 解决视图里面长长的命名空间调用问题

    巴扎黑巴扎黑2016-11-09 11:28:23原创434
    有时候模版里面定义需要写很长的全路径类名,此处提供一个 简易的别名调用代码来规避此问题,缺点就是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);
        }
    }
    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    上一篇:php递归 格式化 数字类型 下一篇:php短网址超简单代码
    VIP课程(WEB全栈开发)

    相关文章推荐

    • 【腾讯云】年中优惠,「专享618元」优惠券!• 用PHP来统计在线人数的四个方法详解• 最近有点迷惘,还想请大家指导上学习的方法 • php函数method_exists()与is_callable()的差别 • php开发装配地址 • php文件有关问题请问
    1/1

    PHP中文网