laravel门面与服务提供者区别

laravel门面与服务提供者区别,第1张

概述laravel门面与服务提供者区别

laravel门面模式与服务提供者区别

以 Laravel 自带的文件系统为例,在 config/app.PHP 的配置文件的 provIDers 数组中,注册了一个服务提供者:

Illuminate\filesystem\filesystemServiceProvIDer::class,

在 alias 数组中定义了一个门面:

‘file’ => Illuminate\Support\Facades\file::class,

通过这两个步骤,我们就可以非常方便的使用 Laravel 提供的文件系统相关的 *** 作,而且调用形式很简洁,如:

file::exist ($path),判断文件是否存在。file::get ($path, $lock = false),获取一个文件的内容。file::append ($path, $data),把内容追加到一个文件末尾。file::files ($directory),获取一个目录下所有文件。

那么这是如何做到的呢?下面分别讲一讲 Laravel 的服务提供者和门面模式。

服务提供者

先看看定义:

服务提供者是所有 Laravel 应用程序启动的中心所在。包括你自己的应用程序,以及所有的 Laravel 核心服务,都是通过服务提供者启动的。

在文件系统这个服务提供者中,位置 /vendor/laravel/framework/src/Illuminate/filesystem/filesystemServiceProvIDer.PHP,register 方法可以看到绑定了一个单例:

protected function registerNativefilesystem(){    $this->app->singleton('files', function () {        return new filesystem;    });}

这个单例是 filesystem 这个类的单例模式。当然,这个服务提供者中也可以绑定其他的单例,或做更多的事情。我们这里只研究 file::exist () 这种调用方式的原理。

那么这样一来就有个 files 的单例,实际上是 filesystem 这个类的实例。

此时,如果没有 Facade,也是可以调用到 filesystem 这个实例的方法的,那就是这样调用:

app(‘files’)->exist($path)

好了,现在开始讲 Facade.

Facade 门面模式

先看下简介:

Facades /fəˈsäd/ 为应用程序的服务容器中可用的类提供了一个「静态」接口。Laravel 自带了许多的 facades,可以用来访问其几乎所有的服务。Laravel facades 就是服务容器里那些基类的「静态代理」,相比于传统的静态方法调用,facades 在提供更简洁且丰富的语法的同时,还有更好的可测试性和扩展性。

本文一开始讲到 alias 数组定义了一个 file,具体的类是

Illuminate\Support\Facades\file::class,

它的内容是:

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

它实际上返回了一个名称,注意这个名称 files,不就是刚刚绑定的单例模式的名称吗?没错。

这样一来,就可以使用 file 这个别名或者说门面,来调用这个 filesystem 实例中的方法了。

通过本文,希望大家能够了解服务提供者,Facade,和实际调用的类的实例之间的关系。

更多Laravel相关技术文章,请访问Laravel框架入门教程栏目进行学习! 总结

以上是内存溢出为你收集整理的laravel门面与服务提供者区别全部内容,希望文章能够帮你解决laravel门面与服务提供者区别所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1234365.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存