ФорумПрограммирование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 Exceptionendif;

    Или я как-то неправильно объявляю этот 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 полезло

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