Http
云策文档标注
概述
Http 类是基于 HTTP 响应的异常类,继承自 Exception,用于处理 HTTP 状态码相关的错误。它提供了构造函数、获取状态消息和根据错误码获取异常类的方法。
关键要点
- Http 类继承自 Exception,用于表示 HTTP 响应异常。
- 包含受保护的属性 $code(HTTP 状态码)和 $reason(原因短语)。
- 构造函数 __construct 允许设置原因短语,并自动生成异常消息。
- 方法 getReason 用于获取状态消息。
- 静态方法 get_class 根据 HTTP 状态码返回对应的异常类名,若不存在则返回 StatusUnknown::class。
代码示例
public function __construct($reason = null, $data = null) {
if ($reason !== null) {
$this->reason = $reason;
}
$message = sprintf('%d %s', $this->code, $this->reason);
parent::__construct($message, 'httpresponse', $data, $this->code);
}注意事项
- 状态码 $code 由子类设置,构造函数中不直接传入。
- get_class 方法使用 sprintf 构建类名,并检查类是否存在,确保异常处理的健壮性。
原文内容
Exception based on HTTP response
Methods
| Name | Description |
|---|---|
| Http::__construct | Create a new exception |
| Http::get_class | Get the correct exception class for a given error code |
| Http::getReason | Get the status message. |
Source
class Http extends Exception {
/**
* HTTP status code
*
* @var integer
*/
protected $code = 0;
/**
* Reason phrase
*
* @var string
*/
protected $reason = 'Unknown';
/**
* Create a new exception
*
* There is no mechanism to pass in the status code, as this is set by the
* subclass used. Reason phrases can vary, however.
*
* @param string|null $reason Reason phrase
* @param mixed $data Associated data
*/
public function __construct($reason = null, $data = null) {
if ($reason !== null) {
$this->reason = $reason;
}
$message = sprintf('%d %s', $this->code, $this->reason);
parent::__construct($message, 'httpresponse', $data, $this->code);
}
/**
* Get the status message.
*
* @return string
*/
public function getReason() {
return $this->reason;
}
/**
* Get the correct exception class for a given error code
*
* @param int|bool $code HTTP status code, or false if unavailable
* @return string Exception class name to use
*/
public static function get_class($code) {
if (!$code) {
return StatusUnknown::class;
}
$class = sprintf('WpOrgRequestsExceptionHttpStatus%d', $code);
if (class_exists($class)) {
return $class;
}
return StatusUnknown::class;
}
}