Heim  >  Artikel  >  Backend-Entwicklung  >  Facade-Wrapper-Klasse – löst das Problem langer Namespace-Aufrufe in der Ansicht

Facade-Wrapper-Klasse – löst das Problem langer Namespace-Aufrufe in der Ansicht

巴扎黑
巴扎黑Original
2016-11-09 11:28:23967Durchsuche

Manchmal erfordert die Definition in der Vorlage das Schreiben eines langen vollständigen Pfadklassennamens, um dieses Problem zu vermeiden. Der Nachteil besteht darin, dass die IDE-Code-Eingabeaufforderungsfunktion wegfällt.

<?php
/**
 * Facade 包装类
 *
 * 优点:
 * 使用简单的方式来省掉视图里面长长的命名空间调用,诸如 YII 的模版
 * 缺点:
 * 这么写在 IDE 中会失去代码自动提示的功能,对于 sublime 狗而言貌似不是缺点
 *
 * 使用方法:
 * ZGFacade::{方法名}( {facade名称}, 参数1, 参数2,...参数n )
 * 
 * <code>
 * // 初始化
 * ZGFacade::setZGFacade(&#39;form&#39;, &#39;Aert_Form&#39;);
 * ZGFacade::setZGFacade(&#39;esClient&#39;, &#39;\Elasticsearch\Client&#39;);
 * 
 * // 使用demo
 * $form = ZGFacade::newInstance(&#39;form&#39;, &#39;frm2&#39;, &#39;delete&#39;);
 * dump($form);
 * 
 * echo ZGFacade::server(&#39;form&#39;, &#39;REQUEST_METHOD&#39;);
 * echo ZGFacade::get(&#39;form&#39;, &#39;a&#39;);
 * 
 * $dsn      = Config::get(&#39;esken.dsn&#39;);
 * $esClient = ZGFacade::newInstance(&#39;esClient&#39;, $dsn);
 * dump($esClient);
 * </code>
 * @author vb2005xu@qq.com
 */
final class ZGFacade
{
private static $map = [
&#39;form&#39;=> &#39;Aert_Form&#39;
];
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("未定义 &#39;facade&#39;: {$facade} ");
}
// 调用 静态方法
if ( &#39;newInstance&#39; == $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("无效 &#39;facade&#39; 调用!");
}
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);
    }
}


Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn