Перехват исключений Синтаксическая ошибка в PHP - PullRequest
0 голосов
/ 26 декабря 2009

Я пытаюсь использовать исключения в PHP как способ избежать нескольких if-then-else блоков. Однако, когда я пытаюсь поймать исключение, я получаю ошибку Parse error: syntax error, unexpected T_CATCH in /directory/functions.php on line 66. Я что-то не так делаю с броском и ловлей?

function doThis($sSchool, $sDivision, $sClass, $sUsername, $sCode,$query1,$query2) 
    {
        connectDb();
        global $dbConnection;

        $sDivisionIdArray = mysqli_query($dbConnection,$query1);
        if ($sDivisionIdArray==false){throw new Exception ();}


        $sDisplayQueryArray = mysqli_query($dbConnection,$query2);
        if ($sDisplayQueryArray==false){throw new Exception ();}

    catch (Exception $e) // This is line 666
        {echo ('Sorry, an error was encountered.');}
    }

Ответы [ 4 ]

5 голосов
/ 26 декабря 2009

Вы забыли оператор try.

function doThis($sSchool, $sDivision, $sClass, $sUsername, $sCode,$query1,$query2) 
{
    try
    {
       connectDb();
       global $dbConnection;

       $sDivisionIdArray = mysqli_query($dbConnection,$query1);
        if ($sDivisionIdArray==false){throw new Exception ();}


       $sDisplayQueryArray = mysqli_query($dbConnection,$query2);
       if ($sDisplayQueryArray==false){throw new Exception ();}
    }
    catch (Exception $e) // This is line 666
    {echo ('Sorry, an error was encountered.');}
}
4 голосов
/ 26 декабря 2009
0 голосов
/ 26 декабря 2009

Другие ответы указывают на отсутствие блока try. Я просто хотел отметить, что использование исключений для управления потоком не всегда хорошая идея. Помимо концептуальной проблемы (исключения должны сигнализировать о том, что произошло нечто необычное, что должно рассматриваться, а не служить прославленным гото), использование исключений может быть менее эффективным .

0 голосов
/ 26 декабря 2009

Чтобы расширить свои знания об исключениях PHP, вы также можете передавать сообщения в ваших сгенерированных исключениях , которые можно перехватить и сохранить (если вы того пожелаете).

function doThis($sSchool, $sDivision, $sClass, $sUsername, $sCode,$query1,$query2) 
{
    try
    {
       connectDb();
       global $dbConnection;

       $sDivisionIdArray = mysqli_query($dbConnection,$query1);
       if ($sDivisionIdArray == false)
           throw new Exception ('Query 1 failed');


       $sDisplayQueryArray = mysqli_query($dbConnection,$query2);
       if ($sDisplayQueryArray == false)
           throw new Exception('Query 2 failed');
    } catch (Exception $e) {
        echo ($e->getMessage());
    }
}

Если вы не включили блоки try / catch вокруг генерируемого исключения, вы можете включить в код обработчик исключений по умолчанию, который будет перехватывать все исключения, генерируемые с помощью set_exception_handler . Это можно использовать для стандартизации страницы с ошибкой 404/500, а также для надлежащей обработки ошибок и возможной регистрации их в файле.

...