FatalThrowableError:在null对象上调用getStatusCode()方法排查求助
排查
Call to a member function getStatusCode() on null错误 我来帮你搞定这个问题——你遇到的FatalThrowableError根源很清晰:不是所有的RequestException异常都会包含响应对象,当你直接调用$e->getResponse()->getStatusCode()时,如果getResponse()返回null,就会触发这个错误。
为什么会出现null响应?
当你的请求根本无法到达目标服务器时(比如DNS解析失败、网络连接超时、服务器直接拒绝连接),Guzzle抛出的RequestException是不会携带响应对象的。这时候调用$e->getResponse()自然会返回null,后续的getStatusCode()调用就会报错。
修复方案
你需要先判断响应对象是否存在,再处理状态码逻辑。下面是具体的修改步骤:
1. 修正StatusCodeHandling方法
在处理状态码前先检查$e->getResponse()是否有效:
public function StatusCodeHandling(RequestException $e) { // 先确认响应对象存在 if ($response = $e->getResponse()) { $statusCode = $response->getStatusCode(); if ($statusCode == 400) { // 自定义400错误的处理逻辑 return "Bad Request: " . $e->getMessage(); } else { // 其他HTTP状态码的处理 return "HTTP Error {$statusCode}: " . $e->getMessage(); } } else { // 处理无响应的情况(网络连接类错误) return "Connection Failed: " . $e->getMessage(); } }
2. 优化pay方法的异常捕获(可选)
你可以进一步细分异常类型,更精准地处理不同场景的错误:
use GuzzleHttp\Exception\ConnectException; use GuzzleHttp\Exception\RequestException; // ... public function pay(string $userid, string $apiuid, int $limiteos) { $api_key = "api_key"; $url = "http://www.payment.com/payment/order"; $client = new Client(); try { $data = [ 'method'=>'create', 'user_id' => $userid, 'api_uid' => $apiuid, 'limit_eos_count' => $limiteos, 'api_key' => $api_key ]; $response = $client->post($url, ['query' => $data]); return json_decode($response->getBody()->getContents()); } catch (ConnectException $e) { // 专门处理连接失败类错误 return "无法连接到支付服务器: " . $e->getMessage(); } catch (RequestException $e) { // 处理有响应的HTTP错误 return $this->StatusCodeHandling($e); } }
这样修改后,不管是网络连接问题还是服务器返回的HTTP错误,都能被正确处理,不会再出现null调用的致命错误。
内容的提问来源于stack exchange,提问作者zoenightshade
相关产品推荐
相关产品推荐

