Как получить доступ к объекту ошибки Pear Cache_Lite?

#php #exception #caching #pear

#php #исключение #кэширование #pear

Вопрос:

Я играю с Cache_Lite Pear, и он выглядит очень простым в использовании. Один из аспектов, с которым я не могу разобраться, — это то, как я могу создавать исключения, чтобы выяснить, в чем заключалась ошибка. Согласно документам, в моем приведенном ниже массиве $options я попробовал 'pearErrorMode' => CACHE_LITE_ERROR_DIE , который остановит скрипт и покажет мне ошибку (а именно, что CacheDir не существует, как в приведенном ниже коде).

Однако я не обязательно хочу показывать эту ошибку пользователю (т. Е. Я, Вероятно, зарегистрирую ее и отправлю им пользовательское сообщение). Затем я подумал, что могу использовать 'pearErrorMode' => CACHE_LITE_ERROR_RETURN , который должен возвращать объект ошибки Pear. Мое впечатление (очевидно, неверное) заключалось в том, что echo $e->getMessage(); затем он получит доступ к объекту ошибки Pear и распечатает его. Однако все, что я получил, это пустой экран. Тогда мой вопрос заключается в том, как я могу выполнить стандартную попытку / перехват, а затем получить доступ к объекту ошибки? Мой фрагмент кода (более или менее копия из руководства по Pear) представлен ниже:

 <?php
    require_once('Cache/Lite.php');
    $id = '123';
    $options = array(
        'cacheDir' => '/oops_I_am_not_a_directory/', //this is the problem line!
        'lifeTime' => 3600
    );
    try {
       $Cache_Lite = new Cache_Lite($options);
       if ($data = $Cache_Lite->get($id)) {
       echo $data;
    } else { 
       $data = "blah";
       $Cache_Lite->save($data);
    }   
    } catch (Exception $e) {
       echo $e->getMessage();   
    }
    ?>
 

Ответ №1:

_RETURN возвращает объект ошибки как возвращаемое значение из функций:

 $error = $cache->get(..);
$error = $cache->save(..);
 

Вы можете проверить, является ли это ошибкой, используя

 $retval = $cache->get(..);
if (PEAR::isError($retval)) {
    echo $retval->getMessage() . "n";
}
 

Кроме того, вы можете заставить его генерировать исключения, установив CACHE_LITE_ERROR_EXCEPTION или PEAR_ERROR_EXCEPTION

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

1. Спасибо за ответ! На самом деле мне пришлось добавить еще одну опцию в мой массив $options, чтобы заставить это работать; но ваша первая строка (т. Е. О том, что объект error должен быть возвращен) вдохновила меня более внимательно ознакомиться с документами. И после некоторого дальнейшего изучения я увидел, что $cache-> save(..) возвращает false, если есть проблема, если только ‘errorHandlingAPIBreak’ => true не является частью массива $options . С помощью дополнительной опции конфигурации он возвращает объект ошибки, как вы описали выше, и я могу использовать $retval-> GetMessage() .