В виду того, что PHP 8 уже стал стандартным пакетом для большинства дистрибутивов, ниже представлена информация о особенностях перехода на эту версию и тем изменениям, которые вероятно нужно будет внести для корректной работы системы и модулей на данной платформе.
(будет дополняться)
Неустановленное значение
Неустановленное значение было равносильно пустому и применялось соответственно. В PHP 8 использование неустановленного значения вызывает ошибку и это значение следует корректно обрабатывать.
Пример | Рекомендация |
---|---|
$res = SQLSelect(...); |
$res = SQLSelect(...); |
global $title; |
$rec['TITLE'] = gr('title'); |
$sortby = $session->data['scripts_sort']; |
$sortby = isset($session->data['scripts_sort']) ? $session->data['scripts_sort'] : ''; или $sortby = $session->data['scripts_sort'] ?? ''; |
if ($out['KEY'] == 'value') {... |
if (isset($out['KEY']) && $out['KEY'] == 'value) {... |
Сравнение числа со строкой
В PHP8 введёна более строгая обработка типов данных и, если раньше корректно работало сравнение двух переменных, которые могли быть разных типов (число и строка), то сейчас такое сравнение может привести к ошибкам, поэтому следует явно приводить сравниваемые значения к необходимому типу.
Пример | Рекомендация |
---|---|
if ($this->getProperty("value")>200) {... |
if ((float)$this->getProperty("value")>200) {... |
$value = getGlobal('TempSensor01.value'); |
$value = (float)getGlobal('TempSensor01.value'); |
Конструктор модуля
Ранее можно было в коде модуля использовать метод с именем модуля и он будет использоваться в качестве конструктора при создании экземпляра модуля, но в PHP8 это перестало работать и необходимо создавать конструктор с помощью метода __construct. В ядре сделана обработка, позволяющее использовать конструкторы "по-старому", но рекомендуется всё же в новых модуля использовать стандартную конструкцию.
Пример | Рекомендация |
---|---|
class devices extends module |
class devices extends module |
Обновление библиотек (зависимостей)
Если код использует стороннюю библиотеку, то рекомендуется проверить наличие её более свежей версии и обновить -- авторы библиотек могли уже внести необходимые изменения в свой код для совместимости.