我正在尝试在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.');}
}
答案 0 :(得分: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.');}
}
答案 1 :(得分:4)
答案 2 :(得分: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错误页面,也可以适当地处理错误,并可以将它们记录到文件中。
答案 3 :(得分:0)
其他答案指出缺少试块。我只想提一下,使用流控制的异常并不总是一个好主意。除了概念问题(例外情况应该表明发生了必须处理的不寻常的事情,而不是作为一个美化的结果),使用例外may be less efficient。