annotate vendor/zendframework/zend-feed/src/Uri.php @ 19:fa3358dc1485 tip

Add ndrum files
author Chris Cannam
date Wed, 28 Aug 2019 13:14:47 +0100
parents 129ea1e6d783
children
rev   line source
Chris@0 1 <?php
Chris@0 2 /**
Chris@0 3 * Zend Framework (http://framework.zend.com/)
Chris@0 4 *
Chris@0 5 * @link http://github.com/zendframework/zf2 for the canonical source repository
Chris@0 6 * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
Chris@0 7 * @license http://framework.zend.com/license/new-bsd New BSD License
Chris@0 8 */
Chris@0 9
Chris@0 10 namespace Zend\Feed;
Chris@0 11
Chris@0 12 class Uri
Chris@0 13 {
Chris@0 14 /**
Chris@0 15 * @var string
Chris@0 16 */
Chris@0 17 protected $fragment;
Chris@0 18
Chris@0 19 /**
Chris@0 20 * @var string
Chris@0 21 */
Chris@0 22 protected $host;
Chris@0 23
Chris@0 24 /**
Chris@0 25 * @var string
Chris@0 26 */
Chris@0 27 protected $pass;
Chris@0 28
Chris@0 29 /**
Chris@0 30 * @var string
Chris@0 31 */
Chris@0 32 protected $path;
Chris@0 33
Chris@0 34 /**
Chris@0 35 * @var int
Chris@0 36 */
Chris@0 37 protected $port;
Chris@0 38
Chris@0 39 /**
Chris@0 40 * @var string
Chris@0 41 */
Chris@0 42 protected $query;
Chris@0 43
Chris@0 44 /**
Chris@0 45 * @var string
Chris@0 46 */
Chris@0 47 protected $scheme;
Chris@0 48
Chris@0 49 /**
Chris@0 50 * @var string
Chris@0 51 */
Chris@0 52 protected $user;
Chris@0 53
Chris@0 54 /**
Chris@0 55 * @var bool
Chris@0 56 */
Chris@0 57 protected $valid;
Chris@0 58
Chris@0 59 /**
Chris@0 60 * Valid schemes
Chris@0 61 */
Chris@0 62 protected $validSchemes = [
Chris@0 63 'http',
Chris@0 64 'https',
Chris@0 65 'file',
Chris@0 66 ];
Chris@0 67
Chris@0 68 /**
Chris@0 69 * @param string $uri
Chris@0 70 */
Chris@0 71 public function __construct($uri)
Chris@0 72 {
Chris@0 73 $parsed = parse_url($uri);
Chris@0 74 if (false === $parsed) {
Chris@0 75 $this->valid = false;
Chris@0 76 return;
Chris@0 77 }
Chris@0 78
Chris@12 79 $this->scheme = isset($parsed['scheme']) ? $parsed['scheme'] : null;
Chris@12 80 $this->host = isset($parsed['host']) ? $parsed['host'] : null;
Chris@12 81 $this->port = isset($parsed['port']) ? $parsed['port'] : null;
Chris@12 82 $this->user = isset($parsed['user']) ? $parsed['user'] : null;
Chris@12 83 $this->pass = isset($parsed['pass']) ? $parsed['pass'] : null;
Chris@12 84 $this->path = isset($parsed['path']) ? $parsed['path'] : null;
Chris@12 85 $this->query = isset($parsed['query']) ? $parsed['query'] : null;
Chris@0 86 $this->fragment = isset($parsed['fragment']) ? $parsed['fragment'] : null;
Chris@0 87 }
Chris@0 88
Chris@0 89 /**
Chris@0 90 * Create an instance
Chris@0 91 *
Chris@0 92 * Useful for chained validations
Chris@0 93 *
Chris@0 94 * @param string $uri
Chris@0 95 * @return self
Chris@0 96 */
Chris@0 97 public static function factory($uri)
Chris@0 98 {
Chris@0 99 return new static($uri);
Chris@0 100 }
Chris@0 101
Chris@0 102 /**
Chris@0 103 * Retrieve the host
Chris@0 104 *
Chris@0 105 * @return string
Chris@0 106 */
Chris@0 107 public function getHost()
Chris@0 108 {
Chris@0 109 return $this->host;
Chris@0 110 }
Chris@0 111
Chris@0 112 /**
Chris@0 113 * Retrieve the URI path
Chris@0 114 *
Chris@0 115 * @return string
Chris@0 116 */
Chris@0 117 public function getPath()
Chris@0 118 {
Chris@0 119 return $this->path;
Chris@0 120 }
Chris@0 121
Chris@0 122 /**
Chris@0 123 * Retrieve the scheme
Chris@0 124 *
Chris@0 125 * @return string
Chris@0 126 */
Chris@0 127 public function getScheme()
Chris@0 128 {
Chris@0 129 return $this->scheme;
Chris@0 130 }
Chris@0 131
Chris@0 132 /**
Chris@0 133 * Is the URI valid?
Chris@0 134 *
Chris@0 135 * @return bool
Chris@0 136 */
Chris@0 137 public function isValid()
Chris@0 138 {
Chris@0 139 if (false === $this->valid) {
Chris@0 140 return false;
Chris@0 141 }
Chris@0 142
Chris@12 143 if ($this->scheme && ! in_array($this->scheme, $this->validSchemes)) {
Chris@0 144 return false;
Chris@0 145 }
Chris@0 146
Chris@0 147 if ($this->host) {
Chris@17 148 if ($this->path && 0 !== strpos($this->path, '/')) {
Chris@0 149 return false;
Chris@0 150 }
Chris@0 151 return true;
Chris@0 152 }
Chris@0 153
Chris@0 154 // no host, but user and/or port... what?
Chris@0 155 if ($this->user || $this->port) {
Chris@0 156 return false;
Chris@0 157 }
Chris@0 158
Chris@0 159 if ($this->path) {
Chris@0 160 // Check path-only (no host) URI
Chris@17 161 if (0 === strpos($this->path, '//')) {
Chris@0 162 return false;
Chris@0 163 }
Chris@0 164 return true;
Chris@0 165 }
Chris@0 166
Chris@0 167 if (! ($this->query || $this->fragment)) {
Chris@0 168 // No host, path, query or fragment - this is not a valid URI
Chris@0 169 return false;
Chris@0 170 }
Chris@0 171
Chris@0 172 return true;
Chris@0 173 }
Chris@0 174
Chris@0 175 /**
Chris@0 176 * Is the URI absolute?
Chris@0 177 *
Chris@0 178 * @return bool
Chris@0 179 */
Chris@0 180 public function isAbsolute()
Chris@0 181 {
Chris@0 182 return ($this->scheme !== null);
Chris@0 183 }
Chris@0 184 }