Сегодня расковыривал один компонент для 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().