【问题标题】:Catching Exceptions Syntax Error in PHP在 PHP 中捕获异常语法错误
【发布时间】:2009-12-26 11:31:09
【问题描述】:

我试图在 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.');}
    }

【问题讨论】:

    标签: php exception exception-handling throw


    【解决方案1】:
    【解决方案2】:

    您忘记了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.');}
    }
    

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          猜你喜欢
          • 2012-12-18
          • 1970-01-01
          • 2013-07-07
          • 1970-01-01
          • 2015-06-11
          • 1970-01-01
          • 2012-01-27
          • 2012-04-22
          相关资源
          最近更新 更多