Created
April 18, 2025 10:00
-
-
Save dineshuprety/8afd7e43d5fc978d44d08b740ce8a635 to your computer and use it in GitHub Desktop.
a well-structured PHP 8.4 class that encapsulates HTTP status codes with their corresponding messages, providing a type-safe way to work with status codes in your applications.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
declare(strict_types=1); | |
namespace App\Http; | |
/** | |
* HTTP Status Code Class | |
* | |
* Provides a comprehensive collection of HTTP status codes with their | |
* corresponding messages in an object-oriented way. | |
*/ | |
final class HTTPStatusCode | |
{ | |
// Informational 1xx | |
public const CONTINUE = 100; | |
public const SWITCHING_PROTOCOLS = 101; | |
public const PROCESSING = 102; | |
public const EARLY_HINTS = 103; | |
// Successful 2xx | |
public const OK = 200; | |
public const CREATED = 201; | |
public const ACCEPTED = 202; | |
public const NON_AUTHORITATIVE_INFORMATION = 203; | |
public const NO_CONTENT = 204; | |
public const RESET_CONTENT = 205; | |
public const PARTIAL_CONTENT = 206; | |
public const MULTI_STATUS = 207; | |
public const ALREADY_REPORTED = 208; | |
public const IM_USED = 226; | |
// Redirection 3xx | |
public const MULTIPLE_CHOICES = 300; | |
public const MOVED_PERMANENTLY = 301; | |
public const FOUND = 302; | |
public const SEE_OTHER = 303; | |
public const NOT_MODIFIED = 304; | |
public const USE_PROXY = 305; | |
public const TEMPORARY_REDIRECT = 307; | |
public const PERMANENT_REDIRECT = 308; | |
// Client Error 4xx | |
public const BAD_REQUEST = 400; | |
public const UNAUTHORIZED = 401; | |
public const PAYMENT_REQUIRED = 402; | |
public const FORBIDDEN = 403; | |
public const NOT_FOUND = 404; | |
public const METHOD_NOT_ALLOWED = 405; | |
public const NOT_ACCEPTABLE = 406; | |
public const PROXY_AUTHENTICATION_REQUIRED = 407; | |
public const REQUEST_TIMEOUT = 408; | |
public const CONFLICT = 409; | |
public const GONE = 410; | |
public const LENGTH_REQUIRED = 411; | |
public const PRECONDITION_FAILED = 412; | |
public const PAYLOAD_TOO_LARGE = 413; | |
public const URI_TOO_LONG = 414; | |
public const UNSUPPORTED_MEDIA_TYPE = 415; | |
public const RANGE_NOT_SATISFIABLE = 416; | |
public const EXPECTATION_FAILED = 417; | |
public const IM_A_TEAPOT = 418; | |
public const MISDIRECTED_REQUEST = 421; | |
public const UNPROCESSABLE_ENTITY = 422; | |
public const LOCKED = 423; | |
public const FAILED_DEPENDENCY = 424; | |
public const TOO_EARLY = 425; | |
public const UPGRADE_REQUIRED = 426; | |
public const PRECONDITION_REQUIRED = 428; | |
public const TOO_MANY_REQUESTS = 429; | |
public const REQUEST_HEADER_FIELDS_TOO_LARGE = 431; | |
public const UNAVAILABLE_FOR_LEGAL_REASONS = 451; | |
// Server Error 5xx | |
public const INTERNAL_SERVER_ERROR = 500; | |
public const NOT_IMPLEMENTED = 501; | |
public const BAD_GATEWAY = 502; | |
public const SERVICE_UNAVAILABLE = 503; | |
public const GATEWAY_TIMEOUT = 504; | |
public const HTTP_VERSION_NOT_SUPPORTED = 505; | |
public const VARIANT_ALSO_NEGOTIATES = 506; | |
public const INSUFFICIENT_STORAGE = 507; | |
public const LOOP_DETECTED = 508; | |
public const BANDWIDTH_LIMIT_EXCEEDED = 509; | |
public const NOT_EXTENDED = 510; | |
public const NETWORK_AUTHENTICATION_REQUIRED = 511; | |
/** | |
* Get the status message for a given status code | |
* | |
* @throws \InvalidArgumentException When the status code is not recognized | |
*/ | |
public static function getMessage(int $statusCode): string | |
{ | |
return match ($statusCode) { | |
// Informational 1xx | |
self::CONTINUE => 'Continue', | |
self::SWITCHING_PROTOCOLS => 'Switching Protocols', | |
self::PROCESSING => 'Processing', | |
self::EARLY_HINTS => 'Early Hints', | |
// Successful 2xx | |
self::OK => 'OK', | |
self::CREATED => 'Created', | |
self::ACCEPTED => 'Accepted', | |
self::NON_AUTHORITATIVE_INFORMATION => 'Non-Authoritative Information', | |
self::NO_CONTENT => 'No Content', | |
self::RESET_CONTENT => 'Reset Content', | |
self::PARTIAL_CONTENT => 'Partial Content', | |
self::MULTI_STATUS => 'Multi-Status', | |
self::ALREADY_REPORTED => 'Already Reported', | |
self::IM_USED => 'IM Used', | |
// Redirection 3xx | |
self::MULTIPLE_CHOICES => 'Multiple Choices', | |
self::MOVED_PERMANENTLY => 'Moved Permanently', | |
self::FOUND => 'Found', | |
self::SEE_OTHER => 'See Other', | |
self::NOT_MODIFIED => 'Not Modified', | |
self::USE_PROXY => 'Use Proxy', | |
self::TEMPORARY_REDIRECT => 'Temporary Redirect', | |
self::PERMANENT_REDIRECT => 'Permanent Redirect', | |
// Client Error 4xx | |
self::BAD_REQUEST => 'Bad Request', | |
self::UNAUTHORIZED => 'Unauthorized', | |
self::PAYMENT_REQUIRED => 'Payment Required', | |
self::FORBIDDEN => 'Forbidden', | |
self::NOT_FOUND => 'Not Found', | |
self::METHOD_NOT_ALLOWED => 'Method Not Allowed', | |
self::NOT_ACCEPTABLE => 'Not Acceptable', | |
self::PROXY_AUTHENTICATION_REQUIRED => 'Proxy Authentication Required', | |
self::REQUEST_TIMEOUT => 'Request Timeout', | |
self::CONFLICT => 'Conflict', | |
self::GONE => 'Gone', | |
self::LENGTH_REQUIRED => 'Length Required', | |
self::PRECONDITION_FAILED => 'Precondition Failed', | |
self::PAYLOAD_TOO_LARGE => 'Payload Too Large', | |
self::URI_TOO_LONG => 'URI Too Long', | |
self::UNSUPPORTED_MEDIA_TYPE => 'Unsupported Media Type', | |
self::RANGE_NOT_SATISFIABLE => 'Range Not Satisfiable', | |
self::EXPECTATION_FAILED => 'Expectation Failed', | |
self::IM_A_TEAPOT => "I'm a Teapot", | |
self::MISDIRECTED_REQUEST => 'Misdirected Request', | |
self::UNPROCESSABLE_ENTITY => 'Unprocessable Entity', | |
self::LOCKED => 'Locked', | |
self::FAILED_DEPENDENCY => 'Failed Dependency', | |
self::TOO_EARLY => 'Too Early', | |
self::UPGRADE_REQUIRED => 'Upgrade Required', | |
self::PRECONDITION_REQUIRED => 'Precondition Required', | |
self::TOO_MANY_REQUESTS => 'Too Many Requests', | |
self::REQUEST_HEADER_FIELDS_TOO_LARGE => 'Request Header Fields Too Large', | |
self::UNAVAILABLE_FOR_LEGAL_REASONS => 'Unavailable For Legal Reasons', | |
// Server Error 5xx | |
self::INTERNAL_SERVER_ERROR => 'Internal Server Error', | |
self::NOT_IMPLEMENTED => 'Not Implemented', | |
self::BAD_GATEWAY => 'Bad Gateway', | |
self::SERVICE_UNAVAILABLE => 'Service Unavailable', | |
self::GATEWAY_TIMEOUT => 'Gateway Timeout', | |
self::HTTP_VERSION_NOT_SUPPORTED => 'HTTP Version Not Supported', | |
self::VARIANT_ALSO_NEGOTIATES => 'Variant Also Negotiates', | |
self::INSUFFICIENT_STORAGE => 'Insufficient Storage', | |
self::LOOP_DETECTED => 'Loop Detected', | |
self::BANDWIDTH_LIMIT_EXCEEDED => 'Bandwidth Limit Exceeded', | |
self::NOT_EXTENDED => 'Not Extended', | |
self::NETWORK_AUTHENTICATION_REQUIRED => 'Network Authentication Required', | |
default => throw new \InvalidArgumentException("Invalid HTTP status code: {$statusCode}") | |
}; | |
} | |
/** | |
* Check if the status code is informational (1xx) | |
*/ | |
public static function isInformational(int $statusCode): bool | |
{ | |
return $statusCode >= 100 && $statusCode < 200; | |
} | |
/** | |
* Check if the status code is successful (2xx) | |
*/ | |
public static function isSuccessful(int $statusCode): bool | |
{ | |
return $statusCode >= 200 && $statusCode < 300; | |
} | |
/** | |
* Check if the status code is a redirection (3xx) | |
*/ | |
public static function isRedirection(int $statusCode): bool | |
{ | |
return $statusCode >= 300 && $statusCode < 400; | |
} | |
/** | |
* Check if the status code is a client error (4xx) | |
*/ | |
public static function isClientError(int $statusCode): bool | |
{ | |
return $statusCode >= 400 && $statusCode < 500; | |
} | |
/** | |
* Check if the status code is a server error (5xx) | |
*/ | |
public static function isServerError(int $statusCode): bool | |
{ | |
return $statusCode >= 500 && $statusCode < 600; | |
} | |
/** | |
* Check if the status code is an error (4xx or 5xx) | |
*/ | |
public static function isError(int $statusCode): bool | |
{ | |
return self::isClientError($statusCode) || self::isServerError($statusCode); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment