Represents a header and all of the values stored by that header
Expanded class hierarchy of Header
class Header implements ToArrayInterface, \IteratorAggregate, \Countable {
protected $values = array();
protected $header;
protected $glue;
protected $stringCache;
protected $arrayCache;
/**
* Construct a new header object
*
* @param string $header Name of the header
* @param array $values Values of the header
* @param string $glue Glue used to combine multiple values into a string
*/
public function __construct($header, $values = array(), $glue = ', ') {
$this->header = $header;
$this->glue = $glue;
if (null !== $values) {
foreach ((array) $values as $key => $value) {
if (is_numeric($key)) {
$key = $header;
}
if ($value === null) {
$this
->add($value, $key);
}
else {
foreach ((array) $value as $v) {
$this
->add($v, $key);
}
}
}
}
}
/**
* Convert the header to a string
*
* @return string
*/
public function __toString() {
if (!$this->stringCache) {
$this->stringCache = implode($this->glue, $this
->toArray());
}
return $this->stringCache;
}
/**
* Add a value to the list of header values
*
* @param string $value Value to add
* @param string $header The exact header casing to add with. Defaults to the name of the header.
*
* @return Header
*/
public function add($value, $header = null) {
if (!$header) {
$header = $this
->getName();
}
if (!array_key_exists($header, $this->values)) {
$this->values[$header] = array(
$value,
);
}
else {
$this->values[$header][] = $value;
}
$this
->clearCache();
return $this;
}
/**
* Get the name of the header
*
* @return string
*/
public function getName() {
return $this->header;
}
/**
* Change the glue used to implode the values
*
* @param string $glue Glue used to implode multiple values
*
* @return Header
*/
public function setGlue($glue) {
$this->glue = $glue;
$this->stringCache = null;
return $this;
}
/**
* Get the glue used to implode multiple values into a string
*
* @return string
*/
public function getGlue() {
return $this->glue;
}
/**
* Normalize the header into a single standard header with an array of values
*
* @return Header
*/
public function normalize() {
$this
->clearCache();
$this->values = array(
$this
->getName() => $this
->toArray(),
);
return $this;
}
/**
* Check if a particular case variation is present in the header
* Example: A header exists on a message for 'Foo', and 'foo'. The Header object will contain all of the values of
* 'Foo' and all of the values of 'foo'. You can use this method to check to see if a header was set using
* 'foo' (true), 'Foo' (true), 'FOO' (false), etc.
*
* @param string $header Exact header to check for
*
* @return bool
*/
public function hasExactHeader($header) {
return array_key_exists($header, $this->values);
}
/**
* Check if the collection of headers has a particular value
*
* @param string $searchValue Value to search for
* @param bool $caseInsensitive Set to TRUE to use a case insensitive search
*
* @return bool
*/
public function hasValue($searchValue, $caseInsensitive = false) {
foreach ($this
->toArray() as $value) {
if ($value == $searchValue) {
return true;
}
elseif ($caseInsensitive && !strcasecmp($value, $searchValue)) {
return true;
}
}
return false;
}
/**
* Remove a specific value from the header
*
* @param string $value Value to remove
*
* @return self
*/
public function removeValue($searchValue) {
foreach ($this->values as $key => $values) {
foreach ($values as $index => $value) {
if ($value == $searchValue) {
unset($this->values[$key][$index]);
$this
->clearCache();
break 2;
}
}
}
return $this;
}
/**
* Get all of the header values as a flat array
* {@inheritdoc}
*/
public function toArray() {
if (!$this->arrayCache) {
$this->arrayCache = array();
foreach ($this->values as $values) {
foreach ($values as $value) {
$this->arrayCache[] = $value;
}
}
}
return $this->arrayCache;
}
/**
* Get the raw data array of the headers. This array is represented as an associative array of the various cases
* that might be stored in the header and an array of values associated with each case variation.
*
* @return array
*/
public function raw() {
return $this->values;
}
/**
* Returns the total number of header values
*
* @return int
*/
public function count() {
return count($this
->toArray());
}
/**
* Get an iterator that can be used to easily iterate over each header value
*
* @return \ArrayIterator
*/
public function getIterator() {
return new \ArrayIterator($this
->toArray());
}
/**
* Clear the internal header cache
*/
private function clearCache() {
$this->arrayCache = null;
$this->stringCache = null;
}
}
Name | Modifiers | Type | Description | Overrides |
---|---|---|---|---|
Header:: |
protected | property | ||
Header:: |
protected | property | ||
Header:: |
protected | property | ||
Header:: |
protected | property | ||
Header:: |
protected | property | ||
Header:: |
public | function | Add a value to the list of header values | |
Header:: |
private | function | Clear the internal header cache | |
Header:: |
public | function | Returns the total number of header values | |
Header:: |
public | function | Get the glue used to implode multiple values into a string | |
Header:: |
public | function | Get an iterator that can be used to easily iterate over each header value | |
Header:: |
public | function | Get the name of the header | |
Header:: |
public | function | Check if a particular case variation is present in the header Example: A header exists on a message for 'Foo', and 'foo'. The Header object will contain all of the values of 'Foo' and all of the values of 'foo'.… | |
Header:: |
public | function | Check if the collection of headers has a particular value | |
Header:: |
public | function | Normalize the header into a single standard header with an array of values | |
Header:: |
public | function | Get the raw data array of the headers. This array is represented as an associative array of the various cases that might be stored in the header and an array of values associated with each case variation. | |
Header:: |
public | function | Remove a specific value from the header | |
Header:: |
public | function | Change the glue used to implode the values | |
Header:: |
public | function |
Get all of the header values as a flat array Overrides ToArrayInterface:: |
|
Header:: |
public | function | Construct a new header object | |
Header:: |
public | function | Convert the header to a string |