Условно проверить наличие предлагаемого пакета в PHP (Composer)

Я разрабатываю пакет PHP (распространяется на Composer), который может извлечь выгоду из ведения журнала, но не требует этого. Я видел много образцов composer.json файлы, которые включают предлагаемые пакеты, например:

{
"suggest": {
"monolog/monolog": "Allows more advanced logging of the application flow"}
}

Как мне узнать, доступна ли библиотека во время выполнения? Я хочу создать экземпляр по умолчанию \Monolog\Logger если это возможно, разрешить потребителю посылки передать свой Psr\Log\LoggerInterface реализация интерфейса, если они хотят. Есть ли лучшие практики вокруг этого?

1

Решение

Если вы предлагаете использовать регистратор, то разработчик может использовать ваш пакет, чтобы использовать это!

Я бы посоветовал вам зависеть от PSR-3 регистратор чтобы упростить интеграцию и позволить разработчику сделать все остальное. Не волшебно использовать регистратор, который, по вашему мнению, установлен! Тот Psr\Log\LoggerAwareInterface есть причина.

1

Другие решения

Я бы посоветовал создать специальный пакет, который бы включал всю логику, связанную с монологами. Если кто-то хотел бы использовать это, он может включить это, и это работает.

Необязательная зависимость — это запах кода и магия, которые легко скрыть. Для более глубокого объяснения, оформить заказ Там нет такой вещи, как необязательная зависимость статья.

0

Я склонен согласиться с ответом Томаша Вотрубы с точки зрения наилучшей практики, но я все равно отвечу на оригинальный вопрос:

Если вы действительно хотите определить, присутствует ли монолог, и применить магию, если она есть, и это действительно относится к любому пакету, проще всего вызвать class_exists('Monolog\Logger') и если это правда, вы знаете, монолог там. Это должно работать, пока у вас нет сломанного автозагрузчика в цепочке, который выдает исключение, когда он не может найти класс, но если вы используете только автозагрузчик Composer, это все хорошо.

Конечно, хорошей идеей будет позволить пользователю внедрить собственную реализацию PSR-3 и использовать ее, если она есть.

0
По вопросам рекламы [email protected]