С версии 14 (2.14) UMI.CMS поддерживает работу на php версии 7. Ядро поддерживает работу на любой версии php от 5.4, а для модулей есть отдельный набор реализаций, поддерживающих 7. Старый набор реализаций модулей находится в директории /classes/modules, а новый в /classes/components.
Примечание: для подключения нового набора реализаций на версиях PHP до PHP 7.*.* необходимо в файле config.ini включить опцию compatible-modules.
Перед переносом необходимо ознакомиться с:
- Гайдом по миграции на php7;
- Описанием новой структуры модуля;
- Change log'ом версии 14 от 24.06.2016, в нем перечислены удаленные методы и классы.
По сути миграция представляет собой доработку и перенос кастомов.
Ход миграции:
- Мигрировать на php7 (удовлетворить требования языка);
- Мигрировать на UMI.CMS 14 (перенести код в новые места или внести правки);
Особенности по миграции на php7 в UMI.CMS:
- Если вы использовали устаревшие функции с префиксом "l_mysql_", то замена для них описана в их phpDoc'ах;
- Клиентские кастомы из __custom.php следует переносить в customMacros.php;
- Административные кастомы из __custom_adm.php следует переносить в customAdmin.php;
- Формат файлов для расширений и кастомов в шаблонах не изменился.
- Обратите внимание, что теперь нельзя через $this получить доступ ко всем методам из подключенных классов;
- В каждом подключенном классе есть ссылка на экземпляр модуля в свойстве $module, через него можно получить доступ к подключенным методам;
- Поддержка методов onInit() и onImplement() была убрана - теперь можно писать нормальные конструкторы;
- Теперь в подключаемых классах можно корректно использовать свойства и ограничения области видимости;
- Все методы обязательно должны вызываться правильно, то есть статические через класс::метод(), а обычные через объект->метод();
- Класс baseModuleAdmin стал трейтом;
- В customAdmin.php методы трейта baseModuleAdmin следует вызывать от экземпляра оригинального класса функционала административной панели;
- def_module теперь не содержит свойства с коллекциями системы;
- Файл includes.php теперь зарезервирован нами для всех системных модулей, вы можете добавить свои классы в автозагрузку через config.ini [autoload];
- У всех подключаемых классов должна быть возможность получения их экземпляров через new, то есть они не должны быть трейтами, интерфейсами, абстрактными классами и т.д.;
- Учитывайте возможность переопределения методов в кастомах;
Примечание: Если при переходе на PHP 7 выходит ошибка при подключении к базе данных, то попробуйте пересохранить пароль к базе данных. Подробнее данная проблема описана в статье http://stackoverflow.com/questions/14612551/mysql-remote-connection-fails-with-unknown-authentication-method.