Source for file URI.class.php

Documentation is available at URI.class.php

  1. /**
  2.  * Класс URI.
  3.  *
  4.  * @package energine
  5.  * @subpackage core
  6.  * @author 1m
  7.  * @copyright ColoCall 2006
  8.  * @version $Id: fsource_energine_core_frameworkURI.class.php.html,v 1.1 2007/09/17 14:32:35 pavka Exp $
  9.  */
  10.  
  11. require_once 'core/framework/Object.class.php';
  12.  
  13. /**
  14.  * URI (Unified Resource Identifier).
  15.  *
  16.  * @package energine
  17.  * @subpackage core
  18.  * @final
  19.  */
  20. final class URI extends Object {
  21.  
  22.     /**
  23.      * @access private
  24.      * @var string схема (протокол) запроса
  25.      */
  26.     private $scheme;
  27.  
  28.     /**
  29.      * @access private
  30.      * @var string сервер (имя хоста)
  31.      */
  32.     private $host;
  33.  
  34.     /**
  35.      * @access private
  36.      * @var array путь
  37.      */
  38.     private $path;
  39.  
  40.     /**
  41.      * @access private
  42.      * @var string строка параметров
  43.      */
  44.     private $query;
  45.  
  46.     /**
  47.      * @access private
  48.      * @var string идентификатор фрагмента документа
  49.      */
  50.     private $fragment;
  51.  
  52.     /**
  53.      * Конструктор класса.
  54.      *
  55.      * @access public
  56.      * @param string $uri 
  57.      * @return void 
  58.      */
  59.     public function __construct($uri{
  60.         parent::__construct();
  61.  
  62.         if (preg_match('/^(\w+):\/\/([a-z0-9\.\-]+)(\/[^?]*)(\?(.*))?$/i'$uri$matches&& count($matches>= 4{
  63.             $this->setScheme($matches[1]);
  64.             $this->setHost($matches[2]);
  65.             $this->setPath($matches[3]);
  66.             $this->setQuery(isset($matches[5]$matches[5'');
  67.         }
  68.         else {
  69.             $this->scheme = $this->host = $this->path = $this->query = $this->fragment = '';
  70.         }
  71.     }
  72.  
  73.     /**
  74.      * Устанавливает схему (протокол) URI.
  75.      *
  76.      * @access public
  77.      * @param string $scheme 
  78.      * @return void 
  79.      */
  80.     public function setScheme($scheme{
  81.         $this->scheme = strtolower($scheme);
  82.     }
  83.  
  84.     /**
  85.      * Возвращает схему (протокол) URI.
  86.      *
  87.      * @access public
  88.      * @return string 
  89.      */
  90.     public function getScheme({
  91.         return $this->scheme;
  92.     }
  93.  
  94.     /**
  95.      * Устанавливает имя хоста.
  96.      *
  97.      * @access public
  98.      * @param string $host 
  99.      * @return void 
  100.      */
  101.     public function setHost($host{
  102.         $this->host = strtolower($host);
  103.     }
  104.  
  105.     /**
  106.      * Возвращает имя хоста.
  107.      *
  108.      * @access public
  109.      * @return string 
  110.      */
  111.     public function getHost({
  112.         return $this->host;
  113.     }
  114.  
  115.     /**
  116.      * Устанавливает путь.
  117.      *
  118.      * @access public
  119.      * @param $path 
  120.      * @return void 
  121.      */
  122.     public function setPath($path{
  123.         if (!is_array($path)) {
  124.             $path = array_values(array_diff(explode('/'$path)array('')));
  125.         }
  126.         $this->path = $path;
  127.     }
  128.  
  129.     /**
  130.      * Возвращает путь в виде массива сегментов или в виде строки,
  131.      * если установлен флаг $asString.
  132.      *
  133.      * @access public
  134.      * @param boolean $asString 
  135.      * @return string 
  136.      */
  137.     public function getPath($asString true{
  138.         $path $this->path;
  139.         if ($asString{
  140.             if (!empty($path)) {
  141.                 $path '/'.implode('/'$path).'/';
  142.             }
  143.             else {
  144.                 $path '/';
  145.             }
  146.         }
  147.         return $path;
  148.     }
  149.  
  150.     /**
  151.      * Возвращает сегмент пути с индексом $pos.
  152.      *
  153.      * @access public
  154.      * @param int $pos 
  155.      * @return string 
  156.      */
  157.     public function getPathSegment($pos{
  158.         if (isset($this->path[$pos])) {
  159.             return $this->path[$pos];
  160.         }
  161.         return '';
  162.     }
  163.  
  164.     /**
  165.      * Устанавливает строку параметров.
  166.      *
  167.      * @access public
  168.      * @param string $query 
  169.      * @return void 
  170.      */
  171.     public function setQuery($query{
  172.         $this->query = strval($query);
  173.     }
  174.  
  175.     /**
  176.      * Возвращает строку параметров.
  177.      *
  178.      * @access public
  179.      * @return string 
  180.      */
  181.     public function getQuery({
  182.         return $this->query;
  183.     }
  184.  
  185.     /**
  186.      * Устанавливает идентификатор фрагмента документа.
  187.      *
  188.      * @access public
  189.      * @param string $fragment 
  190.      * @return void 
  191.      */
  192.     public function setFragment($fragment{
  193.         $this->fragment = strval($fragment);
  194.     }
  195.  
  196.     /**
  197.      * Возвращает идентификатор фрагмента документа.
  198.      *
  199.      * @return string 
  200.      * @access public
  201.      */
  202.     public function getFragment({
  203.         return $this->fragment;
  204.     }
  205.  
  206.     /**
  207.      * Возвращает строковое представление URI.
  208.      *
  209.      * @access public
  210.      * @return string 
  211.      */
  212.     public function __toString({
  213.         if (!empty($this->scheme&& !empty($this->host)) {
  214.             return $this->scheme.'://'.$this->host.
  215.                 (empty($this->path'/' $this->getPath(true)).
  216.                 (empty($this->query'' '?'.$this->query).
  217.                 (empty($this->fragment'' '#'.$this->fragment);
  218.         }
  219.         else {
  220.             return '';
  221.         }
  222.     }
  223. }

Documentation generated on Mon, 17 Sep 2007 13:33:05 +0300 by phpDocumentor 1.4.0a2