diff --git a/src/Message/Response.php b/src/Message/Response.php index d0bc04c..1e1a1e3 100644 --- a/src/Message/Response.php +++ b/src/Message/Response.php @@ -62,17 +62,17 @@ class Response extends Message implements ResponseInterface * @link http://tools.ietf.org/html/rfc7231#section-6 * @link http://www.iana.org/assignments/http-status-codes/http-status-codes.xhtml * @param integer $code The 3-digit integer result code to set. - * @param null|string $reasonPhrase The reason phrase to use with the + * @param string $reasonPhrase The reason phrase to use with the * provided status code; if none is provided, implementations MAY * use the defaults as suggested in the HTTP specification. * @return self * @throws \InvalidArgumentException For invalid status code arguments. */ - public function withStatus($code, $reasonPhrase = null) + public function withStatus($code, $reasonPhrase = "") { $response = clone $this; $response->statusCode = $code; - if ($reasonPhrase === null) { + if (!$reasonPhrase) { $reasonPhrase = $this->getDefaultReasonPhraseForStatusCode($code); } $response->reasonPhrase = $reasonPhrase; @@ -103,69 +103,66 @@ class Response extends Message implements ResponseInterface */ private function getDefaultReasonPhraseForStatusCode($statusCode) { - static $reasonPhraseLookup = null; - if ($reasonPhraseLookup === null) { - $reasonPhraseLookup = [ - 100 => "Continue", - 101 => "Switching Protocols", - 102 => "Processing", - 200 => "OK", - 201 => "Created", - 202 => "Accepted", - 203 => "Non-Authoritative Information", - 204 => "No Content", - 205 => "Reset Content", - 206 => "Partial Content", - 207 => "Multi-Status", - 208 => "Already Reported", - 226 => "IM Used", - 300 => "Multiple Choices", - 301 => "Moved Permanently", - 302 => "Found", - 303 => "See Other", - 304 => "Not Modified", - 305 => "Use Proxy", - 307 => "Temporary Redirect", - 308 => "Permanent Redirect", - 400 => "Bad Request", - 401 => "Unauthorized", - 402 => "Payment Required", - 403 => "Forbidden", - 404 => "Not Found", - 405 => "Method Not Allowed", - 406 => "Not Acceptable", - 407 => "Proxy Authentication Required", - 408 => "Request Timeout", - 409 => "Conflict", - 410 => "Gone", - 411 => "Length Required", - 412 => "Precondition Failed", - 413 => "Payload Too Large", - 414 => "URI Too Long", - 415 => "Unsupported Media Type", - 416 => "Range Not Satisfiable", - 417 => "Expectation Failed", - 421 => "Misdirected Request", - 422 => "Unprocessable Entity", - 423 => "Locked", - 424 => "Failed Dependency", - 426 => "Upgrade Required", - 428 => "Precondition Required", - 429 => "Too Many Requests", - 431 => "Request Header Fields Too Large", - 500 => "Internal Server Error", - 501 => "Not Implemented", - 502 => "Bad Gateway", - 503 => "Service Unavailable", - 504 => "Gateway Timeout", - 505 => "HTTP Version Not Supported", - 506 => "Variant Also Negotiates", - 507 => "Insufficient Storage", - 508 => "Loop Detected", - 510 => "Not Extended", - 511 => "Network Authentication Required" - ]; - } + $reasonPhraseLookup = [ + 100 => "Continue", + 101 => "Switching Protocols", + 102 => "Processing", + 200 => "OK", + 201 => "Created", + 202 => "Accepted", + 203 => "Non-Authoritative Information", + 204 => "No Content", + 205 => "Reset Content", + 206 => "Partial Content", + 207 => "Multi-Status", + 208 => "Already Reported", + 226 => "IM Used", + 300 => "Multiple Choices", + 301 => "Moved Permanently", + 302 => "Found", + 303 => "See Other", + 304 => "Not Modified", + 305 => "Use Proxy", + 307 => "Temporary Redirect", + 308 => "Permanent Redirect", + 400 => "Bad Request", + 401 => "Unauthorized", + 402 => "Payment Required", + 403 => "Forbidden", + 404 => "Not Found", + 405 => "Method Not Allowed", + 406 => "Not Acceptable", + 407 => "Proxy Authentication Required", + 408 => "Request Timeout", + 409 => "Conflict", + 410 => "Gone", + 411 => "Length Required", + 412 => "Precondition Failed", + 413 => "Payload Too Large", + 414 => "URI Too Long", + 415 => "Unsupported Media Type", + 416 => "Range Not Satisfiable", + 417 => "Expectation Failed", + 421 => "Misdirected Request", + 422 => "Unprocessable Entity", + 423 => "Locked", + 424 => "Failed Dependency", + 426 => "Upgrade Required", + 428 => "Precondition Required", + 429 => "Too Many Requests", + 431 => "Request Header Fields Too Large", + 500 => "Internal Server Error", + 501 => "Not Implemented", + 502 => "Bad Gateway", + 503 => "Service Unavailable", + 504 => "Gateway Timeout", + 505 => "HTTP Version Not Supported", + 506 => "Variant Also Negotiates", + 507 => "Insufficient Storage", + 508 => "Loop Detected", + 510 => "Not Extended", + 511 => "Network Authentication Required" + ]; if (isset($reasonPhraseLookup[$statusCode])) { return $reasonPhraseLookup[$statusCode]; } diff --git a/src/Message/Stream.php b/src/Message/Stream.php index b0429ff..4e6a428 100644 --- a/src/Message/Stream.php +++ b/src/Message/Stream.php @@ -49,8 +49,14 @@ class Stream implements StreamInterface */ public function __toString() { - rewind($this->resource); - return $this->getContents(); + $string = ""; + try { + rewind($this->resource); + $string = $this->getContents(); + } catch (Exception $e) { + // Silence exceptions in order to conform with PHP's string casting operations. + } + return $string; } /** diff --git a/test/tests/unit/Message/ResponseTest.php b/test/tests/unit/Message/ResponseTest.php index c4344eb..e1295e1 100644 --- a/test/tests/unit/Message/ResponseTest.php +++ b/test/tests/unit/Message/ResponseTest.php @@ -76,7 +76,7 @@ class ResponseTest extends \PHPUnit_Framework_TestCase [503, null, "Service Unavailable"], [504, null, "Gateway Timeout"], [505, null, "HTTP Version Not Supported"], - [598, null, null], + [598, null, ""], [599, "Nonstandard", "Nonstandard"] ]; }