Вход Регистрация
Файл: concrete5.7.5.6/concrete/vendor/zendframework/zend-uri/src/UriFactory.php
Строк: 116
<?php
/**
 * Zend Framework (http://framework.zend.com/)
 *
 * @link      http://github.com/zendframework/zf2 for the canonical source repository
 * @copyright Copyright (c) 2005-2014 Zend Technologies USA Inc. (http://www.zend.com)
 * @license   http://framework.zend.com/license/new-bsd New BSD License
 */

namespace ZendUri;


/**
 * URI Factory Class
 *
 * The URI factory can be used to generate URI objects from strings, using a
 * different URI subclass depending on the input URI scheme. New scheme-specific
 * classes can be registered using the registerScheme() method.
 *
 * Note that this class contains only static methods and should not be
 * instantiated
 */
abstract class UriFactory
{
    
/**
     * Registered scheme-specific classes
     *
     * @var array
     */
     
protected static $schemeClasses = array(
        
'http'   => 'ZendUriHttp',
        
'https'  => 'ZendUriHttp',
        
'mailto' => 'ZendUriMailto',
        
'file'   => 'ZendUriFile',
        
'urn'    => 'ZendUriUri',
        
'tag'    => 'ZendUriUri',
    );

    
/**
     * Register a scheme-specific class to be used
     *
     * @param string $scheme
     * @param string $class
     */
    
public static function registerScheme($scheme$class)
    {
        
$scheme strtolower($scheme);
        static::
$schemeClasses[$scheme] = $class;
    }

    
/**
     * Unregister a scheme
     *
     * @param string $scheme
     */
    
public static function unregisterScheme($scheme)
    {
        
$scheme strtolower($scheme);
        if (isset(static::
$schemeClasses[$scheme])) {
            unset(static::
$schemeClasses[$scheme]);
        }
    }

    
/**
     * Get the class name for a registered scheme
     *
     * If provided scheme is not registered, will return NULL
     *
     * @param  string $scheme
     * @return string|null
     */
    
public static function getRegisteredSchemeClass($scheme)
    {
        if (isset(static::
$schemeClasses[$scheme])) {
            return static::
$schemeClasses[$scheme];
        } else {
            return 
null;
        }
    }

    
/**
     * Create a URI from a string
     *
     * @param  string $uriString
     * @param  string $defaultScheme
     * @throws ExceptionInvalidArgumentException
     * @return ZendUriUri
     */
    
public static function factory($uriString$defaultScheme null)
    {
        if (!
is_string($uriString)) {
            throw new 
ExceptionInvalidArgumentException(sprintf(
                
'Expecting a string, received "%s"',
                (
is_object($uriString) ? get_class($uriString) : gettype($uriString))
            ));
        }

        
$uri    = new Uri($uriString);
        
$scheme strtolower($uri->getScheme());
        if (!
$scheme && $defaultScheme) {
            
$scheme $defaultScheme;
        }

        if (
$scheme && ! isset(static::$schemeClasses[$scheme])) {
            throw new 
ExceptionInvalidArgumentException(sprintf(
                    
'no class registered for scheme "%s"',
                    
$scheme
                
));
        }
        if (
$scheme && isset(static::$schemeClasses[$scheme])) {
            
$class = static::$schemeClasses[$scheme];
            
$uri = new $class($uri);
            if (! 
$uri instanceof UriInterface) {
                throw new 
ExceptionInvalidArgumentException(sprintf(
                    
'class "%s" registered for scheme "%s" does not implement ZendUriUriInterface',
                    
$class,
                    
$scheme
                
));
            }
        }

        return 
$uri;
    }
}
Онлайн: 0
Реклама