Как работают фасады в Laravel? Как получить доступ к методам с помощью::

Я читал о Фасадной Выкройке

Шаблон фасада (также пишется как фасад) - это шаблон проектирования программного обеспечения, обычно используемый в объектно-ориентированном программировании. Название является аналогом архитектурного фасада. Фасад - это объект, который обеспечивает упрощенный интерфейс с большим объемом кода, например библиотекой классов.

Но в Laravel все методы классов фасадов доступны через :: (Оператор разрешения области действия), даже если методы не являются статичными.

Как это возможно? Почему PHP не говорит, что метод не является статичным.

например Auth::user() хотя user() Метод не является статическим, как это доступно, где-то класс должен быть обновлен или я что-то упустил?

1 ответ

Решение

Магия происходит в 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);
}

Сначала он получает соответствующий экземпляр, а затем просто вызывает запрошенный метод с заданными аргументами.

Другие вопросы по тегам