外墙如何在laravel工作?如何使用::

时间:2018-02-16 16:21:53

标签: php facade laravel-facade

我读到了Facade Pattern

  

Facade模式(也拼写为façade)是一种常用于面向对象编程的软件设计模式。这个名字类似于建筑外观。外观是一个对象,它为更大的代码体提供了简化的接口,例如类库。

但是在Laravel中,所有Facade Classes方法都可以通过 ::(范围解析运算符)访问,即使这些方法根本不是静态的。

这怎么可能?为什么PHP没有说明该方法不是静态的。

例如Auth::user()虽然user()方法是not static,但是如何访问,某个类应该被新建或者我错过了什么?

1 个答案:

答案 0 :(得分:2)

魔术发生在Facade的{​​{3}}函数中。

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);
}

它首先获取适当的实例,然后只使用给定的参数调用所请求的方法。