Zend_Uri
是一个辅助于操作和验证统一资源标识符 (URIs)的组件.
Zend_Uri
的存在主要是为其他组件服务的,比如Zend_Http_Client
,但是作为一个独立的工具也是有用的.
URIs 总是以一个schema(模式,协议)开始,后跟一个冒号(colon).Zend_Uri
类提供一个工厂,
返回一个它本身的 适应于每种模式(scheme)的 子类,子类被命名为Zend_Uri_<scheme>
,
<scheme>
是首字母大写的模式名称.一个例外是HTTPS,它也是由Zend_Uri_Http
处理的.
如果仅有一个模式被传递给Zend_Uri::factory()
,Zend_Uri
将从头构造一个新的URI.
例 32.1. 使用Zend_Uri::factory()
创建一个新的URI
<?php require_once 'Zend/Uri.php'; // 重新创建一个新的URI,仅传递模式. $uri = Zend_Uri::factory('http'); // $uri instanceof Zend_Uri_Http ?>
从头创建一个的新的URI,仅仅需要传递模式给Zend_Uri::factory()
[10] .
如果传递了一个未支持的模式,Zend_Uri_Exception
异常将被抛出.
如果传递的模式或者URI被支持,Zend_Uri::factory()
返回一个它本身的 适应于特定模式(scheme)的 子类
要操作一个现有的URL,把整个URI传递给Zend_Uri::factory()
.
例 32.2. 使用Zend_Uri::factory()
操作一个现有的URI
<?php require_once 'Zend/Uri.php'; // 操作一个现有的URI,把他传入到Zend_Uri::factory(). $uri = Zend_Uri::factory('http://www.zend.com'); // $uri instanceof Zend_Uri_Http ?>
这个URI将被解析并且验证.如果发现它是无效的,Zend_Uri_Exception
异常立即抛出.否则Zend_Uri::factory()
返回一个它本身的 适应于特定模式(scheme)的 子类
Zend_Uri::check()
函数仅在需要验证一个现有的URI时使用.
例 32.3. 使用Zend_Uri::check()
进行URI 验证
<?php require_once 'Zend/Uri.php'; // 验证一个给定的URI是否是格式良好的 $valid = Zend_Uri::check('http://uri.in.question'); // 对于一个有效的URI,$valid为TRUE,否则为FALSE ?>
Zend_Uri::check()
返回布尔值,它比使用Zend_Uri::factory()
更便捷,并且能够捕获异常.
每个Zend_Uri
子类的实例(如:Zend_Uri_Http
)有多个 有用的 处理任何类型的 URI的实例方法.
URI模式是冒号之前的部分.例如http://www.zend.com
的模式是http
.
例 32.4. 从Zend_Uri_*
对象取得模式
<?php require_once 'Zend/Uri.php'; $uri = Zend_Uri::factory('http://www.zend.com'); $scheme = $uri->getScheme(); // "http" ?>
getScheme()
实例方法仅返回URI对象的模式部分.
例 32.5. 从一个Zend_Uri_*
对象取得整个URI
<?php require_once 'Zend/Uri.php'; $uri = Zend_Uri::factory('http://www.zend.com'); echo $uri->getUri(); // "http://www.zend.com" ?>
getUri()
方法返回整个URI的字符串标识.
Zend_Uri::factory()
总是验证传递给它的任何URI,如果给定的URI被认为是无效的,它将不会实例化一个新的Zend_Uri
子类.但是
Zend_Uri
子类为 一个新URI 或者 一个现有的有效的URL 被实例化后,在操作后 该URI可能会变得无效.
例 32.6. 验证一个 Zend_Uri_*
对象
<?php require_once 'Zend/Uri.php'; $uri = Zend_Uri::factory('http://www.zend.com'); $isValid = $uri->valid(); // TRUE ?>
valid()
实例方法检查URI对象是否仍是有效的.