Условно проверить наличие предлагаемого пакета в PHP (Composer)
Я разрабатываю пакет PHP (распространяется на Composer), который может извлечь выгоду из ведения журнала, но не требует этого. Я видел много образцов composer.json
файлы, которые включают предлагаемые пакеты, например:
{
"suggest": {
"monolog/monolog": "Allows more advanced logging of the application flow"
}
}
Как мне узнать, доступна ли библиотека во время выполнения? Я хочу создать экземпляр по умолчанию \Monolog\Logger
если это возможно, разрешить потребителю посылки передать свой Psr\Log\LoggerInterface
реализация интерфейса, если они хотят. Есть ли лучшие практики вокруг этого?
3 ответа
Если вы предлагаете использовать логгер, то разработчик может использовать ваш пакет, чтобы использовать это!
Я бы посоветовал вам полагаться на пакет регистратора PSR-3, чтобы упростить интеграцию, а разработчик сделает все остальное. Не волшебно использовать регистратор, который, по вашему мнению, установлен! Тот Psr\Log\LoggerAwareInterface
есть причина.
Я склонен согласиться с ответом Томаша Вотрубы с точки зрения наилучшей практики, но я все равно отвечу на оригинальный вопрос:
Если вы действительно хотите определить, присутствует ли монолог, и применить магию, если она есть, и это действительно относится к любому пакету, проще всего вызвать class_exists('Monolog\Logger')
и если это правда, вы знаете, монолог там. Это должно работать, пока у вас нет сломанного автозагрузчика в цепочке, который выдает исключение, когда он не может найти класс, но если вы используете только автозагрузчик Composer, это все хорошо.
Конечно, хорошей идеей будет позволить пользователю внедрить собственную реализацию PSR-3 и использовать ее, если она есть.
Я бы посоветовал создать пользовательский пакет, который бы включал всю логику, связанную с монологами. Если кто-то хотел бы использовать это, он может включить это, и это работает.
Необязательная зависимость - это запах кода и магия, которые легко скрыть. Для более глубокого объяснения, оформить заказ Там нет такой вещи, как необязательная статья зависимости.