laravel 中的立面如何工作?如何使用 :: 访问这些方法

How facades work in laravel? How the methods can be accessed with ::

我了解了门面模式

The facade pattern (also spelled façade) is a software design pattern commonly used with object-oriented programming. The name is an analogy to an architectural façade. A facade is an object that provides a simplified interface to a larger body of code, such as a class library.

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

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

例如 Auth::user() 尽管 user() 方法是 not static 如何访问它,class 应该在某个地方更新或者我是否遗漏了什么?

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

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