1

if-then-else複数のブロックを回避する方法として、PHPで例外を使用しようとしています。ただし、例外をキャッチしようとすると、エラーが発生します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

試してみないとキャッチは使えません。

于 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 に答える