Как мигрировать с PHP 5.x на PHP 8.x?php-70

Переход с PHP 5.x на 8.x — значительный скачок через несколько major-версий. Вот пошаговый план миграции:

1. Анализ текущего состояния

// Пример проверки текущей версии PHP
echo 'Текущая версия PHP: ' . phpversion();
  • Составьте инвентаризацию кода и зависимостей
  • Проверьте устаревшие расширения (например, mysql_* функции)

2. Промежуточные версии

Рекомендуемый путь:
PHP 5.x → 7.0 → 7.1 → 7.2 → 7.3 → 7.4 → 8.0 → 8.1 → 8.2 → 8.3

3. Критические изменения, требующие внимания

Удаленные функции/конструкции

// PHP 5.x
mysql_connect(); // Удалено в PHP 7.0
ereg();          // Удалено в PHP 7.0
create_function(); // Удалено в PHP 8.0

Строгая типизация

function sum(int $a, int $b): int {
    return $a + $b;
}
  • Объявления типов стали строже
  • Ошибки теперь выбрасывают TypeError

Изменения в ООП

  • Конструкторы классов теперь называются __construct() (старый стиль удален)
  • Модификаторы final для констант (PHP 8.1+)
  • Readonly свойства (PHP 8.1+)

4. Инструменты для миграции

  1. PHPCompatibility (для PHP_CodeSniffer)
    phpcs --standard=PHPCompatibility target/

  2. Phan и Psalm для статического анализа

  3. Встроенный веб-сервер PHP для тестирования:
    php -S localhost:8000

5. Практические шаги

  1. Обновите composer.json требования:

    {
        "require": {
            "php": "^8.0"
        }
    }
    
  2. Замените устаревшие конструкции:

    • mysql_* → PDO/MySQLi
    • array()[]
    • each()foreach
  3. Тестирование:

    • Постепенное включение строгого режима:
      declare(strict_types=1);
      
    • Проверка логов ошибок (error_reporting(E_ALL))

6. Оптимизация после миграции

  • Использование JIT (PHP 8.0+)
  • Применение атрибутов вместо аннотаций
  • Использование match вместо switch

Резюмируем:

Миграция требует тщательного планирования. Основные этапы:

  1. Анализ кодовой базы
  2. Постепенное обновление через промежуточные версии
  3. Рефакторинг устаревшего кода
  4. Интенсивное тестирование
  5. Оптимизация под новые возможности PHP 8.x

Для сложных проектов рассмотрите возможность постепенного внедрения через параллельный запуск старой и новой версий.