laravel facade 在官方文档中定义为应用的 服务容器 提供了一个「静态」 接口。
说实话我理解起来有点难懂,初步看这不就是静态方法吗?
上图中并不是一个静态方法,通过laravel facade 就可以用静态方法的方式去访问。
//在App\Services新建一个Test类
<?php
namespace App\Services;
class Test {
public function dosomething(){
echo "this is test class ...";
}
}
//在App\Facades 建一个指向Test类的门面类 TestClass
//该类继承自 Illuminate\Support\Facades\Facade 类,
//并且定义了getFacadeAccessor() 方法。这个方法的作用是返回服务容器绑定的名称
//返回test,指向服务容器绑定的名称
<?php
namespace App\Facades;
use Illuminate\Support\Facades\Facade;
class TestClass extends Facade {
protected static function getFacadeAccessor()
{
return 'test';
}
}
//App\Providers\AppServiceProvider.php 注册容器,注意容器名称
public function register()
{
//
$this->app->singleton('test', function () {
return new \App\Services\Test();
});
}
在控制器中通过静态方式去访问
public function index(){
TestClass::dosomething();
}
如果你不想写use 根目录的类名,例如
use App\Facades\TestClass;
可以在config/app.php 中aliases定义别名
'aliases' => [
......
'TestClass' => App\Facades\TestClass::class,
],
回到控制器中
结果也是一样
好了,现在就比较通俗易懂了。Facades就是将类中非静态方法通过静态方式去访问,很多第三方扩展包,安装进来就已经配置Facade通过静态方式去访问