【Laravel5.2翻译】门面


前阵子看了点Laravel源码,越看越乱,网上大部分中文文档都是直译,比较生涩难懂,还是决定看英文文档顺便就我的理解做下翻译整理记录下来

【Laravel5.2翻译】门面_第1张图片
思维导图

简介

门面为应用服务器内可用的类提供了“静态”接口。Laravel装载了许多门面,你可能都没意识到自己正在使用它们!Laravel的门面为服务容器中的基础类提供了”静态代理”,提供了简洁形象的语法,让我们维护起来比传统静态方法更灵活可测。

使用面门

在Laravel的上下文中,facade就是一个类,它提供了容器中对象的访问入口。让它工作的核心就是Facade类。Laravel的门面和任何自定义的门面都要继承Illuminate\Support\Facades\Facade类。

facade类只需要实现一个方法:getFacadeAccessorgetFacdeAccessor方法的职责就是定义从容器中解析什么。门面的基类使用__callStatic()魔术方法来延时从facade中调用被解析的对象。
在下面的例子中,调用了Laravel缓存系统。初看之下,你可能会觉得Cache类的静态方法get被调用了

 $user]);
    }
}

注意我们在文件头上导入的Cache门面,这个门面作为一个代理来访问Illuminate\Contracts\Factory接口的基础实现。任何时候我们调用门面都将会传递给Laravel缓存服务的基础实现。
如果我们看下Illuminate\Support\Facades\Cache类,你将看到里面没有静态方法get:

class Cache extends Facade
{
    /**
     * Get the registered name of the component.
     *
     * @return string
     */
    protected static function getFacadeAccessor() { return 'cache'; }
}

取而代之的,Cache门面继承了Facade类然后定义了getFacadeAccessor。记住,这个方法的职责是返回服务容器绑定名。当用到Cache门面的任何静态方法,Laravel会从服务容器中解析cache绑定然后运行请求的对象方法(这里是get)。

你可能感兴趣的:(【Laravel5.2翻译】门面)