我读到了Facade Pattern
Facade模式(也拼写为façade)是一种常用于面向对象编程的软件设计模式。这个名字类似于建筑外观。外观是一个对象,它为更大的代码体提供了简化的接口,例如类库。
但是在Laravel中,所有Facade Classes方法都可以通过 ::
(范围解析运算符)访问,即使这些方法根本不是静态的。
这怎么可能?为什么PHP没有说明该方法不是静态的。
例如Auth::user()
虽然user()
方法是not static,但是如何访问,某个类应该被新建或者我错过了什么?
答案 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);
}
它首先获取适当的实例,然后只使用给定的参数调用所请求的方法。