Ошибка Creating default object from empty value.

Сегодня расковыривал один компонент для Joomla 1.5 и в процессе нашелся такой вот забавный баг. При построении списка создавался массив, который отдавал в логи ошибку при каждой итерации:

Warning: Creating default object from empty value in /srv/vhosts/…/xxx.php on line 200

Ларчик просто открывался. Эта ошибка справедлива для PHP >=5.4, для более ранних версий все будет хорошо.

Выяснилось, что в строке 200 было это:

$lists[$i]->value = $row->product_available_date;

Естественно, вместо $row->product_available_date может быть что угодно. Чтобы это дело пофиксить, определяем это все дело в качестве класса:

$lists[$i] = new stdClass();

То есть, в конечном итоге получается вот такое:

$lists[$i] = new stdClass();
$lists[$i]->value = $row->product_available_date;

Стоит учесть, что конструкции:

$lists[$i] = NULL;
$lists[$i]->value = $row->product_available_date;

или, например,

$lists[$i] = 123;
$lists[$i]->value = $row->product_available_date;

или

$lists[$i] = '';
$lists[$i]->value = $row->product_available_date;

будут не верны.

То есть, создавая объект в PHP >=5.4, нужно объявить его как stdClass().

0

Добавить комментарий