Cloning a HeaderCollection yields deep copies of the Headers.
This commit is contained in:
parent
5f676cb79f
commit
a2ae6fff7d
|
|
@ -4,6 +4,11 @@ namespace WellRESTed\Message\Header;
|
|||
|
||||
class HeaderCollection implements \ArrayAccess
|
||||
{
|
||||
/**
|
||||
* @var array
|
||||
*
|
||||
* Hash array with keys as lowercase header names, Header[] as values.
|
||||
*/
|
||||
private $headers;
|
||||
|
||||
public function __construct()
|
||||
|
|
@ -11,16 +16,28 @@ class HeaderCollection implements \ArrayAccess
|
|||
$this->headers = [];
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $offset
|
||||
* @return bool
|
||||
*/
|
||||
public function offsetExists($offset)
|
||||
{
|
||||
return isset($this->headers[strtolower($offset)]);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param mixed $offset
|
||||
* @return Header[]
|
||||
*/
|
||||
public function offsetGet($offset)
|
||||
{
|
||||
return $this->headers[strtolower($offset)];
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $offset
|
||||
* @param string $value
|
||||
*/
|
||||
public function offsetSet($offset, $value)
|
||||
{
|
||||
$header = new Header($offset, $value);
|
||||
|
|
@ -32,8 +49,27 @@ class HeaderCollection implements \ArrayAccess
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $offset
|
||||
*/
|
||||
public function offsetUnset($offset)
|
||||
{
|
||||
unset($this->headers[strtolower($offset)]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Make a deep copy of all headers in the arrays
|
||||
*/
|
||||
public function __clone()
|
||||
{
|
||||
$originalHeaders = $this->headers;
|
||||
$this->headers = [];
|
||||
foreach ($originalHeaders as $name => $headers) {
|
||||
$clonedHeaders = [];
|
||||
foreach ($headers as $header) {
|
||||
$clonedHeaders[] = clone $header;
|
||||
}
|
||||
$this->headers[$name] = $clonedHeaders;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -74,4 +74,24 @@ class HeaderCollectionTest extends \PHPUnit_Framework_TestCase
|
|||
unset($collection["set-cookie"]);
|
||||
$this->assertFalse(isset($collection["set-cookie"]));
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers WellRESTed\Message\Header\HeaderCollection::__clone
|
||||
* @uses WellRESTed\Message\Header\HeaderCollection::__construct
|
||||
* @uses WellRESTed\Message\Header\HeaderCollection::offsetSet
|
||||
* @uses WellRESTed\Message\Header\HeaderCollection::offsetExists
|
||||
* @uses WellRESTed\Message\Header\HeaderCollection::offsetUnset
|
||||
* @uses WellRESTed\Message\Header\Header
|
||||
*/
|
||||
public function testCloneMakesDeepCopyOfHeaders()
|
||||
{
|
||||
$collection = new HeaderCollection();
|
||||
$collection["Set-Cookie"] = "cat=Molly";
|
||||
|
||||
$clone = clone $collection;
|
||||
unset($clone["Set-Cookie"]);
|
||||
|
||||
$this->assertTrue(isset($collection["set-cookie"]));
|
||||
$this->assertFalse(isset($clone["set-cookie"]));
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue