Php 如何捕获多个异常类型?

Php 如何捕获多个异常类型?,php,exception,guzzle,Php,Exception,Guzzle,我有以下代码- public function getPosts($limit = 25, $author = null) { try { } catch(\GuzzleHttp\Exception\ClientException $e) { return []; } return []; } 我在404s页面上添加了这个b/c,我得到了客户端异常,但是如果服务器返回500个错误,我会得到一个服务器异常-我尝试用捕获(异常$ex)替换它,但

我有以下代码-

public function getPosts($limit = 25, $author = null) {

    try {

    } catch(\GuzzleHttp\Exception\ClientException $e) {
        return [];
    }

    return [];
}

我在404s页面上添加了这个b/c,我得到了
客户端异常
,但是如果服务器返回500个错误,我会得到一个
服务器异常
-我尝试用
捕获(异常$ex)
替换它,但是我仍然得到了未处理/未捕获的异常错误。

只列出多个捕获:

try {
   ...
} catch (FooException e) {
   ...
} catch (BarException e) {
   ...
} catch (Exception e) {
   ...
}

对于php中的不同异常类型,可以有多个catch块:

  try {

    } catch(\GuzzleHttp\Exception\ClientException $e) {
        return [];
    } catch(\GuzzleHttp\Exception\ServerException  $e) {
       //handle it...
 }
但是,假设Guzzle异常扩展了普通php
Exception
类(当然是这样),将其更改为
Exception$e
应该可以。您确定这是引发异常的地方吗


在guzzle站点上,您可以看到所有客户端/服务器扩展的
GuzzleHttp\Exception\TransferException
base,因此您可以尝试捕获一个
GuzzleHttp\Exception\TransferException

捕获可以一个接一个地链接,以处理多种错误类型

public function getPosts($limit = 25, $author = null) {

    try {

    } catch(\GuzzleHttp\Exception\ClientException $e) {
        return [];
    } catch(\GuzzleHttp\Exception\ServerException $e) {
        return [];
    }

    return [];
}
继续接球

public function getPosts($limit = 25, $author = null) {

    try {

    } catch(\GuzzleHttp\Exception\ClientException $e) {
        return [];
    } catch (ServerException) {
        //some code
    }

    return [];
}

注意名称空间,如果您试图捕获异常,它将捕获所有异常,如果它没有,可能您没有将异常包括在use exception中,或者试图捕获\exception

谢谢-我刚在其他地方检查过,我有另一个地方使用GuzzleHttp,但没有捕获异常-将其替换为just
exception$e
worked。@5SK5我通常建议使用最细粒度的异常。它会如果你提供更多的细节会更好。至少使用OP问题中的异常,不要忘记根命名空间(前导反斜杠)!