foreach循环中的PHP异常

时间:2012-01-15 13:15:05

标签: php exception try-catch

在foreach循环中实现php异常(try {} catch(){})的正确方法是这样的:

foreach ($apis as $api)
{                 
     $api = '_'.$api;
     $searchResults[$api] = $this->$api($parameters);
}

我想实现php异常,如果其中一个 $ this-> api(); 返回错误消息,请抓住它并在catch中执行if以显示右侧返回错误消息的消息。

编辑: 此外,捕获错误时,如果错误消息为1(例如),这是一个好方法:

$searchResults['api'] = $this->_api($parameters);

所以它试图再次执行该功能,看看它是否带来了有效数据?

3 个答案:

答案 0 :(得分:3)

foreach ($apis as $api)
{                 
     $api = '_'.$api;
     try {
         $searchResults[$api] = $this->$api($parameters);
     }
     catch(ParameterException $e) {
         // parameterexception handling here
         echo "A ParameterException was thrown";
     }
     catch(Exception $e) {
         // All other exceptions
         echo "Some other Exception was thrown";
     }
}

您也可以区分更多异常类型。

答案 1 :(得分:3)

因为只有在异常的情况下才会执行catch块,所以如果你在try块中包含for-each循环,或者你将try-catch放在循环体内,它实际上没有区别。

你应该采取任何增加更多清晰度。但是,如果将来需要,在循环内部执行此操作将使您能够处理与循环体相关的更具体的异常。

此外,由于输入了异常,因此您不需要执行if,只需添加不同的catch子句:

try {
    :
} catch (FirstExceptionType $e) {
    :
} catch (SecondExceptionType $e) {
    :
}

答案 2 :(得分:1)

您使用的代码将始终失败,因为您尝试使用变量($this->$api($params);)作为函数。但是,您可以按如下方式实现try-catch:

foreach ($apis as $api)
{                 
     $api = '_'.$api;
     try {
         $searchResults[$api] = $this->$api($parameters);
     }
     catch(Exception $e) {
         // handle exception
     }
}

您还可以通过在其中添加另一个catch()和另一个Exception类来处理多个不同类型的异常,例如:

foreach ($apis as $api)
{                 
     $api = '_'.$api;
     try {
         $searchResults[$api] = $this->$api($parameters);
     }
     catch(OtherException $e) {
         // Handle it
     }
     catch(Exception $e) {
         // Handle it
     }

}