Вход Регистрация
Файл: concrete5.7.5.6/concrete/vendor/league/url/src/Components/Query.php
Строк: 105
<?php
/**
* This file is part of the League.url library
*
* @license http://opensource.org/licenses/MIT
* @link https://github.com/thephpleague/url/
* @version 3.3.5
* @package League.url
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace LeagueUrlComponents;

use 
ArrayAccess;
use 
RuntimeException;

/**
 *  A class to manipulate URL Query component
 *
 *  @package League.url
 *  @since  1.0.0
 */
class Query extends AbstractArray implements QueryInterfaceArrayAccess
{
    
/**
     * The Constructor
     *
     * @param mixed $data can be string, array or Traversable
     *                    object convertible into Query String
     */
    
public function __construct($data null)
    {
        
$this->set($data);
    }

    
/**
     * {@inheritdoc}
     */
    
public function set($data)
    {
        
$this->data array_filter($this->validate($data), function ($value) {
            if (
is_string($value)) {
                
$value trim($value);
            }

            return 
null !== $value;
        });
    }

    
/**
     * {@inheritdoc}
     */
    
public function get()
    {
        if (!
$this->data) {
            return 
null;
        }

        return 
str_replace(
            array(
'+'),
            array(
'%20'),
            
http_build_query($this->data'''&')
        );
    }

    
/**
     * {@inheritdoc}
     */
    
public function __toString()
    {
        return (string) 
$this->get();
    }

    
/**
     * {@inheritdoc}
     */
    
public function sameValueAs(ComponentInterface $component)
    {
        return 
$this->__toString() == $component->__toString();
    }

    
/**
     * {@inheritdoc}
     */
    
public function getUriComponent()
    {
        
$value $this->__toString();
        if (
'' != $value) {
            
$value '?'.$value;
        }

        return 
$value;
    }

    
/**
     * {@inheritdoc}
     */
    
public function modify($data)
    {
        
$this->set(array_merge($this->data$this->validate($data)));
    }

    
/**
     * {@inheritdoc}
     */
    
protected function validate($data)
    {
        return 
$this->convertToArray($data, function ($str) {
            if (
'' == $str) {
                return array();
            }
            if (
'?' == $str[0]) {
                
$str substr($str1);
            }

            
//let's preserve the key params
            
$str preg_replace_callback('/(?:^|(?<=&))[^=|&[]+/', function ($match) {
                return 
bin2hex(urldecode($match[0]));
            }, 
$str);
            
parse_str($str$arr);

            
//hexbin does not work in PHP 5.3
            
$arr array_combine(array_map(function ($value) {
                return 
pack('H*'$value);

            }, 
array_keys($arr)), $arr);

            return 
$arr;
        });
    }

    
/**
     * {@inheritdoc}
     */
    
public function offsetSet($offset$value)
    {
        if (
is_null($offset)) {
            throw new 
RuntimeException('offset can not be null');
        }
        
$this->modify(array($offset => $value));
    }
}
Онлайн: 0
Реклама