Laravel中的门面功能Facades
2019-06-17 13:58
1396 查看
Laravel中的门面功能Facades Laravel中的门面功能是选择性使用的,也可以不用它,不影响功能实现。那么,为什么要用它呢? 只有搞清楚了使用门面的好处,我们才能更好的使用它。 当我们需要调用一个类的非静态方法时,我们有三种方法: 1、依赖注入,获取实例后直接调用。 2、app()方法获取实例,调用。 3、use 进来直接 new,然后调用。 第一种方式是最简单合理的,但是,使用门面后还能再简化一步。 use A; A::get(); 虽然get()方法是非静态的,但是设置了门面后就可以静态化调用。 因此,Facades就是静态代理,在使用时能够提供更加灵活、更加易于测试、更加优雅的语法。 Laravel框架自带了一些门面,vendor/illuminate/support/Facades 打开目录下Cache.php <?php namespace Illuminate\Support\Facades; class Cache extends Facade { protected static function getFacadeAccessor() { return 'cache'; } } Cache门面是常用的缓存类,继承自 Illuminate\Support\Facades\Facade,在getFacadeAccessor 方法中返回一个容器cache,也就是最终是由cache的实例来提供服务的,Cache只是代理。 自定义门面 1、门面代理:app/Support/Facades/TestFacade.php <?php namespace App\Support\Facades; use Illuminate\Support\Facades\Facade; class TestFacade extends Facade { public static function getFacadeAccessor(){ return 'App\Services\Common\TestService'; } } 2、服务容器:app\Services\Common\TestService.php <?php namespace App\Services\Common; class TestService { public function get(){ return 'TestService@get'; } } 3、使用门面 use App\Support\Facades\TestFacade; $result = TestFacade::get(); 门面多用在工具类的调用上,方便调用与调试。 实际上基类 Facade 实现一了个魔术方法 __callStatic(),也就说调用不未定义的静态方法时会触发 此方法: public static function __callStatic($method, $args) { $instance = static::getFacadeRoot(); if (! $instance) { throw new RuntimeException('A facade root has not been set.'); } return $instance->$method(...$args); } 其实,当一个类的非静态方法被静态调用时,基本都是__callStatic()来实现的。
相关文章推荐
- Laravel —— 门面(Facades)
- 对 laravel 中服务提供者(Provider)和 门面(Facades) 的理解
- laravel5.2总结--门面(facades)
- Laravel Facades 门面模式的实现
- 对 laravel 中服务提供者(Provider)和 门面(Facades) 的理解
- laravel框架总结(六) -- 门面(facades)
- Laravel 实现 Facades 功能
- Laravel五大功能之Eloquent关系模式
- 在 Laravel 中 “规范” 的开发短信验证码发送功能
- Laravel 门面类:Facade简记
- Laravel 5.3 使用内置的 Auth 组件实现多用户认证功能以及登陆才能访问后台的功能的一种实现方法
- Laravel 5.5 简单上传文件功能
- 在 Laravel 5 中集成七牛云存储实现云存储功能(非上传)
- Laravel五大功能之Eloquent关系模式
- 如何在 Laravel 中 “规范” 的开发验证码发送功能
- Laravel 5.1 中的ACL用户授权及权限检查功能实现教程
- 在 Laravel 5 中使用 Laravel Excel 实现 Excel/CSV 文件导入导出功能
- laravel5.4 cookie商品最近浏览功能
- laravel 文章发布功能----ckeditor使用(附带post处理方法)
- 利用laravel+ajax实现文件上传功能方法示例