20 листопада 2025 року вийшов черговий великий реліз PHP - версія 8.5. Цей
реліз має цікаві нововведення для розробників, але як завжди, постає питання
сумісності з існуючими системами, зокрема й OpenCart. У цьому матеріалі
розглянемо ключові зміни та їхній вплив на розробку модулів і розширень для
OpenCart та й загалом на систему.
Що нового в PHP 8.5
- Нове вбудоване розширення URI
-
PHP 8.5 отримав вбудоване розширення для роботи з URI, що відповідає
стандартам RFC 3986 та WHATWG URL. Це особливо корисно для e-commerce
платформ, які активно працюють з URL для SEO та маршрутизації.
- Оператор каналів (Pipe operator)
-
Новий оператор `|>` дозволяє створювати ланцюжки функцій без проміжних
змінних. Це покращує читаність коду та може бути корисним при розробці
модулів OpenCart.
- Покращене клонування об'єктів
-
Функція `clone()` тепер підтримує модифікацію властивостей під час
клонування, що спрощує реалізацію патерну "with-er" для readonly класів.
-
Новий атрибут попереджає, коли значення, що повертається функцією, не
використовується, що допомагає уникати помилок у розробці.
-
У PHP додались корисні функції - array_first() і array_last(), які
відповідно повертають перший або останній елемент масиву. Якщо масив
порожній, обидві функції повертають null.
Сумісність OpenCart з PHP 8.x
Перед розглядом чи взагалі можливо перейти на нову версію PHP, треба
зрозуміти поточну ситуацію з підтримкою PHP 8.x в OpenCart:
- OpenCart 3.0.3.9-3.0.4.1 - PHP 7.4, 8.0, 8.1, 8.2, 8.3
- OpenCart 3.0.5.0 (планується) - PHP 8.1, 8.1, 8.2, 8.3, 8.4
- OpenCart 4.x - PHP 8.0+
Запровадження PHP 8.5 матиме і позитивні, і потенційно проблемні наслідки.
До переваг належать покращення роботи з URL, зручніший підхід до обробки
даних через pipe-оператор та гнучкіше використання клонування об’єктів.
Проте можливі складнощі пов’язані з deprecated-функціоналом, суворішою
типізацією та несумісністю частини сторонніх модулів. PHP 8.5 робить
застарілими такі конструкції, як (boolean), (integer), (double), (binary), а
також старі варіанти case; у switch і деякі особливості роботи з масивами.
Це може викликати помилки у старому коді.
Для власників магазинів на OpenCart у найближчі 6-12 місяців доцільно
залишатися на PHP 8.1–8.3. Перехід на PHP 8.5 рекомендується робити лише
після тестування на окремому staging-середовищі. Варто також оновити
платформу щонайменше до 3.0.4.1, якщо використовується значно старіша
версія.
Перед майбутнім оновленням важливо провести аудит усіх встановлених модулів,
з’ясувати їхню сумісність із PHP 8.5 і за потреби підготувати оновлення або
заміну. У коді бажано завчасно замінити застарілі касти типів, перевірити
конструкції switch (case з крапкою і комою застарів) і оновити роботу з масивами.
Розробникам модулів OpenCart
Масово адаптовувати модулі під PHP 8.5 поки що зарано, бо сама система
наразі не підтримує PHP 8.5 офіційно, як і багато бібліотек також. Використовувати конструкції, які
підтримує лише PHP 8.5, також не варто, оскільки розробники мають
враховувати сумісність їх продуктів з різними користувацькими
системами. Але розробники вже зараз можуть потестувати свої модулі з
PHP 8.5 і принаймні виправити всі помилки і попередження.
Приклад деяких застарілих операторів
Замість
$bool = (boolean) $value;
$int = (integer) $value;
Використовуйте
$bool = (bool) $value;
$int = (int) $value;
Приклади використання нових можливостей (лише для PHP 8.5)
Використання нового URI розширення
use Uri\Rfc3986\Uri;
$uri = new Uri($url);
$cleanHost = $uri->getHost();
Pipe operator для обробки даних
$cleanTitle = $title
|> trim(...)
|> str_replace(' ', '-', ...)
|> strtolower(...);
Реліз PHP 8.5 - чудова новина, безперечно, але його використання потребує обережного підходу в існуючих OpenCart проектах. Основні ризики пов'язані не з
новим функціоналом, а з видаленням застарілого коду та більш строгими
перевірками типів. Переходьте на нові версії PHP тільки після повного
тестування та підготовки.