Особенности совместимости с PHP8

В виду того, что PHP 8 уже стал стандартным пакетом для большинства дистрибутивов, ниже представлена информация о особенностях перехода на эту версию и тем изменениям, которые вероятно нужно будет внести для корректной работы системы и модулей на данной платформе.

(будет дополняться)

Неустановленное значение

Неустановленное значение было равносильно пустому и применялось соответственно. В PHP 8 использование неустановленного значения вызывает ошибку и это значение следует корректно обрабатывать.

Пример Рекомендация
$res = SQLSelect(...);
if ($res[0]['ID']) {...
$res = SQLSelect(...);
if (isset($res[0])) {..
global $title;
$rec['TITLE'] = $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
{
function devices()
{...
class devices extends module
{
function __construct()
{...

Обновление библиотек (зависимостей)

Если код использует стороннюю библиотеку, то рекомендуется проверить наличие её более свежей версии и обновить -- авторы библиотек могли уже внести необходимые изменения в свой код для совместимости.