0

我读到了Facade Pattern

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

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

这怎么可能?为什么 PHP 不告诉该方法不是静态的。

例如,Auth::user()即使该user()方法不是静态的,如何访问,该类应该在某个地方更新还是我错过了什么?

4

1 回答 1

2

魔法发生在Facade's__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);
}

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

于 2018-02-16T16:29:17.030 回答