Я читал про Фасад
Шаблон фасада (также пишется как фасад) — это шаблон проектирования программного обеспечения, обычно используемый в объектно-ориентированном программировании. Название является аналогом архитектурного фасада. Фасад — это объект, который обеспечивает упрощенный интерфейс для большей части кода, например библиотеки классов.
Но в Laravel все методы классов фасада доступны через ::
(Оператор разрешения области видимости) хотя методы не являются статичными вообще.
Как это возможно? Почему PHP не говорит, что метод не является статичным.
например Auth::user()
хотя user()
метод не статично как это доступно, где-то класс должен быть обновлен или я что-то упустил?
Магия происходит в 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);
}
Сначала он получает соответствующий экземпляр, а затем просто вызывает запрошенный метод с заданными аргументами.
Других решений пока нет …