ФорумПрограммированиеPHP для идиотов → try - catch так и должен реагировать?

try - catch так и должен реагировать?

  • tihoho

    Сообщения: 18 Репутация: N Группа: Кто попало

    Spritz Фев. 11, 2013, 1:20 п.п.

    class Templater 
    {

    public function get($name)
    {
    //try
    //{
    $tpl = file_get_contents("tpls/tpl-{$name}.tpl");

    //throw new Exception("Шаблон <em><b>{$name}</b></em> не найден.<br/>");

    //} catch (Exception $e)
    //{
    //return $e->getMessage();
    //}
    return $tpl;
    }

    }


    Так грузит нормально. А при разкомментированном try-catch вылетает исключение. Так и должно быть? Ставить throw в
     if ($tpl = file_get_contents)
    {
    throw…
    }

  • vasa_c

    Сообщения: 3131 Репутация: N Группа: в ухо

    Spritz Фев. 11, 2013, 1:37 п.п., спустя 16 минут 41 секунду

    понятно ничего
  • tihoho

    Сообщения: 18 Репутация: N Группа: Кто попало

    Spritz Фев. 11, 2013, 1:47 п.п., спустя 10 минут 3 секунды

    Этот скрипт открывает файл. И если его нет - вылетает предупреждение. Только оно вылетает в любом случае, даже если файл есть. В связи с этим спрашиваю - нужно ли throw new Exception ставить в условие типа такого:
    if($tpl = file_get_contents("tpls/tpl-{$name}.tpl"):
    throw new Exception…
    endif;

    Или я как-то неправильно объявляю этот try ?
  • AlexB

    Сообщения: 4306 Репутация: N Группа: в ухо

    Spritz Фев. 11, 2013, 1:58 п.п., спустя 11 минут 8 секунд


    Только оно вылетает в любом случае, даже если файл есть.

    потому что ты его пробрасываешь принудительно


    В связи с этим спрашиваю - нужно ли throw new Exception ставить в условие типа такого:

    можно сначала проверить через file_exists
    но ловить его надо снаружи, а не в том же методе, который его пробрасывает
    а то это онанизм напоминает ))))


    Или я как-то неправильно объявляю этот try ?

    http://pyha.ru/articles/php/exceptions/
  • tihoho

    Сообщения: 18 Репутация: N Группа: Кто попало

    Spritz Фев. 11, 2013, 1:58 п.п., спустя 23 часа 59 минут 59 секунд

    Все, понял, спасибо)
  • Flare

    Сообщения: 284 Репутация: N Группа: Кто попало

    Spritz Фев. 11, 2013, 3:15 п.п., спустя 1 час 16 минут 44 секунды

    У тебя исключение кидается когда файл удачно считается
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz Фев. 11, 2013, 4:31 п.п., спустя 1 час 16 минут 34 секунды

    можно сначала проверить через file_exists

    + is_readable
    Сапожник без сапог
  • Sinkler

    Сообщения: 7958 Репутация: N Группа: в ухо

    Spritz Фев. 11, 2013, 4:53 п.п., спустя 21 минуту 38 секунд

    какие-то все понятливые стали
  • Josh

    Сообщения: 2008 Репутация: N Группа: Кто попало

    Spritz Фев. 11, 2013, 8:37 п.п., спустя 3 часа 43 минуты 54 секунды

    $headers = get_headers("tpls/tpl-{$name}.tpl");
    if(is_file("tpls/tpl-{$name}.tpl") && is_readable("tpls/tpl-{$name}.tpl") && file_exists("tpls/tpl-{$name}.tpl") && file_get_contents("tpls/tpl-{$name}.tpl") && fopen("tpls/tpl-{$name}.tpl", "r") && preg_match("|200|", $headers[0]) ){
    echo "ВС ЗБС";
    }
  • master

    Сообщения: 3244 Репутация: N Группа: Джедаи

    Spritz Фев. 19, 2013, 6:14 п.п., спустя 7 дней 21 час 37 минут

    правильно так

    try {
    $tpl = file_get_contents("tpls/tpl-{$name}.tpl");
    echo ('file opened');
    } catch (Exception $e) {
    // обрабатываем исключение, например, пишем в лог $e->getMessage();
    // если ошибка за пределы блока не должна выходить - то ничего не пишем,
    // если ошибку нужно обработать в верхнем уровне, то бросаем исключение принудительно:
    // throw $e;
    }

    в нормальных языках любые ошибки бросают исключения, но в пыхе есть три способа выбрасывания ошибок. или два
    основной, олдскул тксзть - error_handler, он задаётся функцией set_error_handler
    поэтому пишешь отдельно в начале скрипта

    function error_handler($code, $message, $file, $line) {
    throw new Exception($code, $message, $file, $line);
    }
    set_error_handler('error_handler');

    ну или смотри последний коммент тут http://www.php.net/manual/ru/ref.errorfunc.php#e-error
    теперь обычная ошибка выбросит исключение. проверить просто - подели где-нибудь в коде на ноль
    в общем, после такой комбинации у тебя в случае ошибки чтения из файла должно выбрасываться и ловиться исключение
    не всё полезно, что в swap полезло

Пожалуйста, авторизуйтесь, чтобы написать комментарий!