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);
}
它首先获取适当的实例,然后使用给定的参数简单地调用请求的方法。
我了解了门面模式
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);
}
它首先获取适当的实例,然后使用给定的参数简单地调用请求的方法。