Вход Регистрация
Файл: monst/Xsolla/Guzzle/Http/Message/Header.php
Строк: 113
<?php

namespace GuzzleHttpMessage;

use 
GuzzleCommonVersion;
use 
GuzzleHttpMessageHeaderHeaderInterface;

/**
 * Represents a header and all of the values stored by that header
 */
class Header implements HeaderInterface
{
    protected 
$values = array();
    protected 
$header;
    protected 
$glue;

    
/**
     * @param string       $header Name of the header
     * @param array|string $values Values of the header as an array or a scalar
     * @param string       $glue   Glue used to combine multiple values into a string
     */
    
public function __construct($header$values = array(), $glue ',')
    {
        
$this->header trim($header);
        
$this->glue $glue;

        foreach ((array) 
$values as $value) {
            foreach ((array) 
$value as $v) {
                
$this->values[] = $v;
            }
        }
    }

    public function 
__toString()
    {
        return 
implode($this->glue ' '$this->toArray());
    }

    public function 
add($value)
    {
        
$this->values[] = $value;

        return 
$this;
    }

    public function 
getName()
    {
        return 
$this->header;
    }

    public function 
setName($name)
    {
        
$this->header $name;

        return 
$this;
    }

    public function 
setGlue($glue)
    {
        
$this->glue $glue;

        return 
$this;
    }

    public function 
getGlue()
    {
        return 
$this->glue;
    }

    
/**
     * Normalize the header to be a single header with an array of values.
     *
     * If any values of the header contains the glue string value (e.g. ","), then the value will be exploded into
     * multiple entries in the header.
     *
     * @return self
     */
    
public function normalize()
    {
        
$values $this->toArray();

        for (
$i 0$total count($values); $i $total$i++) {
            if (
strpos($values[$i], $this->glue) !== false) {
                
// Explode on glue when the glue is not inside of a comma
                
foreach (preg_split('/' preg_quote($this->glue) . '(?=([^"]*"[^"]*")*[^"]*$)/'$values[$i]) as $v) {
                    
$values[] = trim($v);
                }
                unset(
$values[$i]);
            }
        }

        
$this->values array_values($values);

        return 
$this;
    }

    public function 
hasValue($searchValue)
    {
        return 
in_array($searchValue$this->toArray());
    }

    public function 
removeValue($searchValue)
    {
        
$this->values array_values(array_filter($this->values, function ($value) use ($searchValue) {
            return 
$value != $searchValue;
        }));

        return 
$this;
    }

    public function 
toArray()
    {
        return 
$this->values;
    }

    public function 
count()
    {
        return 
count($this->toArray());
    }

    public function 
getIterator()
    {
        return new 
ArrayIterator($this->toArray());
    }

    public function 
parseParams()
    {
        
$params $matches = array();
        
$callback = array($this'trimHeader');

        
// Normalize the header into a single array and iterate over all values
        
foreach ($this->normalize()->toArray() as $val) {
            
$part = array();
            foreach (
preg_split('/;(?=([^"]*"[^"]*")*[^"]*$)/'$val) as $kvp) {
                if (!
preg_match_all('/<[^>]+>|[^=]+/'$kvp$matches)) {
                    continue;
                }
                
$pieces array_map($callback$matches[0]);
                
$part[$pieces[0]] = isset($pieces[1]) ? $pieces[1] : '';
            }
            if (
$part) {
                
$params[] = $part;
            }
        }

        return 
$params;
    }

    
/**
     * @deprecated
     * @codeCoverageIgnore
     */
    
public function hasExactHeader($header)
    {
        
Version::warn(__METHOD__ ' is deprecated');
        return 
$this->header == $header;
    }

    
/**
     * @deprecated
     * @codeCoverageIgnore
     */
    
public function raw()
    {
        
Version::warn(__METHOD__ ' is deprecated. Use toArray()');
        return 
$this->toArray();
    }

    
/**
     * Trim a header by removing excess spaces and wrapping quotes
     *
     * @param $str
     *
     * @return string
     */
    
protected function trimHeader($str)
    {
        static 
$trimmed ""'  nt";

        return trim($str, $trimmed);
    }
}
Онлайн: 1
Реклама