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