欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

Laravel中的门面(Facades)有什么意义?

Laravel中有助手函数,那么为什么还需要Facades呢?
他相对于使用助手函数以及直接去访问底层类有什么好处吗?
(文档我有点看不懂,所以才来问的这问题)

Facade是一个设计模式

你需要自行实现一个Facade对象,把所有的方法调用代理到真实的对象。

```
class UserFacade
{
   private $user;

public function __constructor()
   {
       $this->user = new User();
   }

public function __callStatic($name, $arguments)
   {
       return call_user_func_array(array($this, $name), $arguments);
   }
}
```

```
$user UserFacade::get();
```

任何对UserFacade的静态方法调用都会代理到User。`__callStatic`在有静态调用的时候触发,传入的参数$name是`UserFacade::get`静态调用的方法名,$arguments是参数的数组。

Laravel官方描述Facade是简洁的、容易记忆的类调用,Laravel的特性基本都提供Facade类。在业务开发这个层面,我不推荐静态类调用的设计方式,这个我另外开个帖子讨论。

参考
- laravel.com/docs/5.4/fa
- php.net/manual/en/langu
- php.net/manual/en/funct
门面绑定的都有对应的类,那么假如你需要换一种实现,不需要修改代码逻辑。
Laravel的Facade个人觉得是为了追求设计而弄出来的,Facade设计模式是提供统一的接口,隐藏内部实现,当你修改内部实现而不影响外观。反观Laravel的魔术方法调用,如果更换实现反而还要遵循原实现的接口。

让你用起来更爽,约等于语法糖

简单说为了简化书写。
比如缓存类,没有门面类的话。这么写
$c = new Cache(xxxx);  $c->get();
或者服务容器取出来app('cache')->get();

使用门面的话
Cache::get();

来自  https://www.zhihu.com/question/53156930

普通分类: