Composer - класс автозагрузки для конкретной версии PHP

Фактически мы переносим наш проект PHP с PHP 5.3 на 7.2.

Недавно я перенес много библиотек в Composer.

У меня проблема с заменой PHPExcel на PhpSpreadSheet, который не поддерживает PHP 5.3.

На данный момент я храню PHPExcel в отдельной папке и использую PHP_VERSION_ID для использования того или другого.

// early in the file to use another dependency
require_once 'vendor/autoload.php';
.
.
.
if (PHP_VERSION_ID > 50400) {
      $workbook = new PhpOffice\PhpSpreadsheet\Spreadsheet();
} else {
      require_once 'lib/PHPExcel/Classes/PHPExcel.php';
      $workbook = new PHPExcel();
}

На данный момент наш код должен работать под PHP 5.3 и 7.2.

Есть ли решение, чтобы автозагрузчик Composer не загружал PhpSpreadSheet автоматически под PHP 5.3?

пожалуйста, прикрепите пример

bxN5 08.08.2018 11:27

я обновил свой вопрос

Rafik Haceb 08.08.2018 11:37

Полностью удалите его из composer, потребуйте оба класса вручную, пока вы не перенесете на 7.2, а затем добавьте обратно в composer.

fire 08.08.2018 11:41

Вызывает ли автозагрузка ошибку, если PhpSpreadsheet загружен в версии 5.3?

AwesomeGuy 08.08.2018 11:42

оказывается, что электронная таблица не работает без Composer. Есть ли решение для создания пакета со своими зависимостями?

Rafik Haceb 08.08.2018 11:43

@Imaginaroom Да, одна из зависимостей Ошибка анализа: синтаксическая ошибка, неожиданный '.', Ожидание '&' или T_VARIABLE в vendor / markbaker / complex / classes / src / operations / add.php в строке 18

Rafik Haceb 08.08.2018 11:45

Думаю, я приму предложение @fire. Я попробую создать пакет PhpSpreadSheet со всеми его зависимостями в папке lib и обработать автозагрузку вручную. Спасибо .

Rafik Haceb 08.08.2018 13:00
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
7
463
1

Ответы 1

Is there a solution to tell Composer autoloader to not autoload PhpSpreadSheet under PHP 5.3?

Автозагрузчик Composer не будет загружать какой-либо класс, пока вы его не запрашиваете. Таким образом, самый простой вариант указать Composer не загружать указанный класс - это не использовать его. :)

Однако переход с PHP 5.3 на 7.2 - сложная задача, попытка сделать ваше приложение совместимым с обеими этими версиями может сильно усложнить задачу. Я предлагаю рассматривать это как две отдельные версии, разработанные в разных ветках с разными требуемыми версиями PHP. Должно быть проще иметь две строки, в которых одна должна заботиться только о PHP 5.3, а вторая - только о PHP 7.2, чем взламывать одну строку для совместимости с PHP 5.3 и 7.2. PHP 5.3 был выпущен в 2009 году - он на 7 лет старше PHP 7.2, и за это время было изменено множество вещей.

Это не совсем правильно, так как пакет может всегда запрашивать выполнение кода через "autoload":{"files":"..."}, поэтому технически пакет всегда может выполнять код, даже если он не используется. Эта функция автозагрузки файлов предназначена для импорта глобальных функций, которые по-прежнему не могут быть загружены автоматически. С другой стороны, более вероятно, что пакеты для старых версий PHP безоговорочно используют эту функцию - современные пакеты polyfill, например. от Symfony делают все возможное, чтобы повлиять на как можно меньше вариантов использования (ноль).

Sven 27.08.2018 22:57

@Sven phpoffice/phpspreadsheet не использует эту функцию, поэтому, хотя вы в целом правы, это не тот случай, о котором вы говорите.

rob006 28.08.2018 00:29

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