在foreach循环中实现php异常(try{}catch(){})的正确方法如下:
foreach ($apis as $api)
{
$api = '_'.$api;
$searchResults[$api] = $this->$api($parameters);
}
我想为$this->api()返回一条错误消息,然后捕获它,并在捕获中执行if以显示返回的错误消息的正确消息。
编辑:此外,当捕获错误时,如果错误消息为1(例如),这是一个好方法吗:
$searchResults['api'] = $this->_api($parameters);
所以它尝试再次执行该函数,看看这次是否带来了有效的数据?
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";
}
}
您也可以区分更多的异常类型。
由于catch块只有在出现异常的情况下才会执行,因此如果将for each循环封装在try块中,或者将try-catch放在循环体中,实际上没有什么区别。
你应该采取任何能增加清晰度的措施。但是,如果将来需要的话,在循环内部执行将使您能够处理与循环主体相关的更具体的异常。
此外,由于异常是键入的,您不需要执行if,只需放入不同的catch子句:
try {
:
} catch (FirstExceptionType $e) {
:
} catch (SecondExceptionType $e) {
:
}
您使用的代码总是会失败,因为您试图将变量($this->$api($params);
)用作函数。无论如何,你可以实现你的尝试捕获如下:
foreach ($apis as $api)
{
$api = '_'.$api;
try {
$searchResults[$api] = $this->$api($parameters);
}
catch(Exception $e) {
// handle exception
}
}
您还可以通过添加另一个catch()
来处理不同类型的多个Exception,其中包含另一个Exception类,如:
foreach ($apis as $api)
{
$api = '_'.$api;
try {
$searchResults[$api] = $this->$api($parameters);
}
catch(OtherException $e) {
// Handle it
}
catch(Exception $e) {
// Handle it
}
}