类文档

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;
	}
}