Как обрабатывать несовместимые версии интерфейсов PHP?Php

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 Как обрабатывать несовместимые версии интерфейсов PHP?

Сообщение Anonymous »

У меня есть приложение PHP, которое использует интерфейс \Psr\Log\LoggerInterface и классы, реализующие этот интерфейс. Мое приложение можно настроить для аутентификации пользователей при установке Joomla, работающей на том же сервере. Это делается путем включения кода Joomla с помощью

Код: Выделить всё

require_once JPATH_BASE . '/includes/defines.php';
require_once JPATH_BASE . '/includes/framework.php';
чтобы у меня был доступ к API Joomla. Проблема в том, что Joomla также использует свою собственную версию \Psr\Log\LoggerInterface, и поскольку мое приложение работает на PHP 7.2 и выше, тогда как Joomla 6 работает на PHP 8.3 и выше, мы используем разные версии LoggerInterface. Это означает, что если мой код заставляет автозагрузчик сначала загрузить мою версию интерфейса, то, когда автозагрузчик Joomla загружает класс Joomla, реализующий этот интерфейс, я получаю ошибки такого рода:

Код: Выделить всё

Declaration of Psr\Log\AbstractLogger::emergency(Stringable|string $message, array $context = []): void must be compatible with Psr\Log\LoggerInterface::emergency($message, array $context = [])
потому что объявления типов Joomla являются подмножеством объявлений типов в моей версии интерфейса.
Я решил эту проблему, заставив свой код сначала загружать версию интерфейса Joomla, чтобы при запуске моих классов, реализующих интерфейс, не возникало ошибок, поскольку мои объявления типов являются надмножеством объявлений типов интерфейса Joomla.
Но есть ли лучшее решение?>

Подробнее здесь: https://stackoverflow.com/questions/798 ... interfaces
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»