| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177 | <?php/* * This file is part of the Symfony package. * * (c) Fabien Potencier <fabien@symfony.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */namespace Symfony\Component\HttpFoundation;/** * Represents an Accept-* header item. * * @author Jean-François Simon <contact@jfsimon.fr> */class AcceptHeaderItem{    private $value;    private $quality = 1.0;    private $index = 0;    private $attributes = [];    public function __construct(string $value, array $attributes = [])    {        $this->value = $value;        foreach ($attributes as $name => $value) {            $this->setAttribute($name, $value);        }    }    /**     * Builds an AcceptHeaderInstance instance from a string.     *     * @return self     */    public static function fromString(?string $itemValue)    {        $parts = HeaderUtils::split($itemValue ?? '', ';=');        $part = array_shift($parts);        $attributes = HeaderUtils::combine($parts);        return new self($part[0], $attributes);    }    /**     * Returns header value's string representation.     *     * @return string     */    public function __toString()    {        $string = $this->value.($this->quality < 1 ? ';q='.$this->quality : '');        if (\count($this->attributes) > 0) {            $string .= '; '.HeaderUtils::toString($this->attributes, ';');        }        return $string;    }    /**     * Set the item value.     *     * @return $this     */    public function setValue(string $value)    {        $this->value = $value;        return $this;    }    /**     * Returns the item value.     *     * @return string     */    public function getValue()    {        return $this->value;    }    /**     * Set the item quality.     *     * @return $this     */    public function setQuality(float $quality)    {        $this->quality = $quality;        return $this;    }    /**     * Returns the item quality.     *     * @return float     */    public function getQuality()    {        return $this->quality;    }    /**     * Set the item index.     *     * @return $this     */    public function setIndex(int $index)    {        $this->index = $index;        return $this;    }    /**     * Returns the item index.     *     * @return int     */    public function getIndex()    {        return $this->index;    }    /**     * Tests if an attribute exists.     *     * @return bool     */    public function hasAttribute(string $name)    {        return isset($this->attributes[$name]);    }    /**     * Returns an attribute by its name.     *     * @param mixed $default     *     * @return mixed     */    public function getAttribute(string $name, $default = null)    {        return $this->attributes[$name] ?? $default;    }    /**     * Returns all attributes.     *     * @return array     */    public function getAttributes()    {        return $this->attributes;    }    /**     * Set an attribute.     *     * @return $this     */    public function setAttribute(string $name, string $value)    {        if ('q' === $name) {            $this->quality = (float) $value;        } else {            $this->attributes[$name] = $value;        }        return $this;    }}
 |