1

我试图在 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

4 回答 4

5

你忘了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.');}
}
于 2009-12-26T11:34:11.643 回答
5

你不能不尝试就使用 catch 。

于 2009-12-26T11:34:19.757 回答
0

其他答案指出缺少 try 块。我只想提一下,使用异常进行流控制并不总是一个好主意。除了概念问题(异常应该表明发生了必须处理的不寻常的事情,而不是作为一个美化的 goto),使用异常可能效率较低

于 2009-12-26T16:27:00.033 回答
0

为了增加您对 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 错误页面,还可以适当地处理错误并可能将它们记录到文件中。

于 2009-12-26T12:47:03.793 回答