Этот вопрос проверяет, понимаете ли вы, как в Laravel устроен удобный доступ к сервисам контейнера и чем фасад отличается от “просто статического класса”.
Фасад (Facade) в Laravel — это удобная “обёртка”, которая позволяет вызывать методы сервиса как будто статически, хотя внутри используется объект из контейнера зависимостей. То есть Cache::get() выглядит как статический вызов, но на деле Laravel достаёт реальную реализацию кеша и вызывает метод у неё. Фасады упрощают чтение кода и сокращают количество ручного внедрения зависимостей в простых местах. Примеры популярных фасадов: Log, Cache, DB, Storage, Auth, Config.
Laravel активно использует контейнер зависимостей, и фасады — это один из способов удобно добраться до сервисов, зарегистрированных в контейнере.
Определение: Facade — это класс-прокси, который перенаправляет “статический” вызов на реальный объект-сервис из Service Container.
Вы пишете Cache::put('k', 'v', 60).
Laravel по ключу фасада понимает, какой сервис нужен (например, cache).
Берёт реализацию из контейнера и вызывает у неё метод put.
Короткий и читабельный код в контроллерах, командах, скриптах.
Единый стиль доступа к типовым сервисам (логирование, конфиг, БД, файлы).
Возможность подменять реализации (например, другой драйвер кеша) без изменения мест вызова.
DB — работа с базой (запросы, транзакции)
Log — логирование
Cache — кеш
Storage — файловые хранилища
Auth — аутентификация
Config — доступ к конфигам
use Illuminate\Support\Facades\Cache;
use Illuminate\Support\Facades\Log;
Cache::put('user:1', ['id' => 1], 300);
Log::info('User cached', ['id' => 1]);
Фасад не равен “настоящему статическому классу”: это прокси к объекту.
В местах, где важна тестируемость и явные зависимости, часто удобнее внедрять интерфейс/сервис через DI, а фасад оставлять для простых сценариев.
Фасады стоит использовать, когда нужен быстрый и читаемый доступ к инфраструктурным сервисам (лог, кеш, файлы), но для сложной бизнес-логики и более строгой тестируемости чаще выбирают явное внедрение зависимостей.