<rmcreative>

RSS

Все заметки с тегом «Exception»

Можно уточнить:

    (1)
    (1)
  1. (1)
  1. Проектирование сущностей предметной области, мысли

    1 апреля

    Дмитрий Елисеев опубликовал у себя в блоге интересную статью: «Проектирование сущностей предметной области». Рекомендуется к прочтению и осознанию.

    После прочтения возникают мысли и вопросы. Я был бы рад, если бы Дмитрий разобрал их в следующей статье.

    Читаем

    12 комментариев
  2. PHP и юникод в стрэктрейсе

    12 марта 2012

    Какое-то время назад creocoder наткнулся на ????? вместо значения параметра в логах ошибок Yii. После анализа проблемы стало ясно, что нашёлся баг в PHP.

    Exception::getTraceAsString и Exception::__toString не работают с юникодом в значениях параметров при построении stacktrace. В результате для

    <?php
    function test($arg){
        throw new Exception();
    }
     
    try {
        test('тест');
    }
    catch(Exception $e) {
        echo $e->getTraceAsString();
        echo (string)$e;
    }

    получаем

    d:\web\usr\local\php54>php.exe d:\src\exception_wrong_trace\test.php
    #0 D:\src\exception_wrong_trace\test.php(7): test('????')
    #1 {main}exception 'Exception' in D:\src\exception_wrong_trace\test.php:3
    Stack trace:
    #0 D:\src\exception_wrong_trace\test.php(7): test('????')
    #1 {main}
    

    Обойти можно собрав строку руками на основе массива, полученного через Exception::getTrace.

    В Yii пока решили это не фиксить. Заслал баг на php.net.

    3 комментария
  3. Как выкинуть исключение в __toString и к чему это приведёт

    20 марта 2010

    Как известно, исключения кидать в __toString() PHP запрещает. Выглядит это не очень-то логично, но запрещено не просто так. Вообще __toString() — штука крайне нестабильная и сложная в отладке.

    Оказалось, что исключение в __toString() выкинуть всё-таки можно при помощи своего обработчика ошибок и приведёт это довольно неожиданным результатам.

    Читаем

    3 комментария