<?php
/**
* This file is part of the PHP Generics package.
*
* @package Generics
*/
namespace Generics\Client;
/**
* This class provides helper for status code to status message conversion
*
* @author Maik
*/
class HttpStatus
{
const STATUS_200 = 'OK';
const STATUS_301 = 'Moved Permanently';
const STATUS_302 = 'Found';
const STATUS_400 = 'Bad Request';
const STATUS_401 = 'Unauthorized';
const STATUS_403 = 'Forbidden';
const STATUS_404 = 'Not Found';
const STATUS_500 = 'Internal Server Error';
const STATUS_501 = 'Not Implemented';
const STATUS_502 = 'Bad Gateway';
const STATUS_503 = 'Service Unavailable';
const STATUS_505 = 'HTTP Version Not Supported';
/**
* The status code
*
* @var int
*/
private $code;
/**
* The protocol version
*
* @var string
*/
private $proto;
/**
* Create a new HttpStatus instance
*
* @param int $code
* The status code
* @param string $protocolVersion
* The version of Http protocol (e.g. 1.0)
*/
public function __construct($code, $protocolVersion = '1.1')
{
$this->code = $code;
$this->proto = $protocolVersion;
}
/**
* Retrieve the status message for a particular code
*
* @param int $code
*
* @return string The status message
*/
public static function getStatus($code): string
{
$prop = sprintf("Generics\\Client\\HttpStatus::STATUS_%d", $code);
return constant($prop);
}
/**
* Parse the status line into its parts
*
* @param string $statusLine
*
* @return HttpStatus
*/
public static function parseStatus($statusLine): HttpStatus
{
list ($proto, $code) = sscanf($statusLine, "%s %d %s");
return new HttpStatus($code, $proto);
}
/**
* Retrieve the status line
*
* @return string The status line according RFC
* @see http://greenbytes.de/tech/webdav/draft-ietf-httpbis-p1-messaging-latest.html#rfc.section.3.1.2
*/
public function toStatusLine(): string
{
return sprintf("%s %d %s", $this->proto, $this->code, self::getStatus($this->code));
}
/**
* Retrieve the status as string
* It is a wrapper for
*
* @see \Generics\Client\HttpStatus::toStatusLine()
*
* @return string
*/
public function __toString(): string
{
return $this->toStatusLine();
}
/**
* Get the status code
*
* @return int
*/
public function getCode(): int
{
return $this->code;
}
/**
* Get the protocol including version
*
* @return string
*/
public function getProtocol(): string
{
return $this->proto;
}
}
|