Неверная работа isError() в PHP 5.4

В последнее время появилось много жалоб на странные глюки в компоненте Tickets. Вот тут не редактируется тикет, а вот тут — не выводятся секции и комментарии.

Оказывается, всему виной функция isError() в классе modX::modProcessorResponse
public function isError() {
    return empty($this->response) || empty($this->response['success']);
}

Она нужна для того, чтобы знать — были ошибки при работе процессора, или нет? Так вот, при прочих равных условиях она возвращает false в php 5.3 и true в php 5.4.

Проверить просто:
$response = $modx->runProcessor('resource/getlist');

var_dump($response->isError());  // 5.3 - false, 5.4 - true
var_dump(empty($response->response));  // 5.3 - false, 5.4 - false
var_dump(empty($response->response['success']));  // 5.3 - false, 5.4 - true
var_dump($response->response['success']); // 5.3 - false, 5.4 - true +  Warning Illegal string offset 'success'

То есть, функция empty() ведёт себя иначе в новой версии php, о чём честно написано в документации.

Создал тему на официальном форуме и зарепортил багу на трекер.

Похоже, эта ошибка касается только getList процессоров, которые возвращают json строку и ничего не пишут в «success». То есть, проблема даже не в функции, а в неоднородности формата ответа от разных процессоров.

В ближайшее время изменю проверки в Tickets и выпущу новую версию.
Василий Наумкин
20 января 2013, 05:31
modx.pro
1 835
0

Комментарии: 1

Sadykh Sadykhov
20 января 2013, 10:00
0
Оперативно :) Спасибо!
    Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
    1