目次
Zend_Uri は、
Uniform Resource
Identifiers (URIs) の操作および検証を行うためのコンポーネントです。
Zend_Uri の本来の目的は
Zend_Http_Client のような他のコンポーネントを支援することですが、
単体で使用しても便利です。
URI の最初は常にスキームから始まり、その後にコロンが続きます。
スキームにはさまざまなものがあります。
Zend_Uri クラスは、
各スキームに特化した自身のサブクラスを返すファクトリメソッドを提供しています。
サブクラスの名前は 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 は Zend_Uri_Http のインスタンスとなります
?>
新しい URI を作成するには、スキームのみを
Zend_Uri::factory() に渡します
[11]。
サポートしていないスキームが渡された場合は、
Zend_Uri_Exception がスローされます。
渡されたスキームあるいは URI をサポートしている場合は、
Zend_Uri::factory() は自分自身のサブクラスを返します。
これは、指定したスキームに特化したものとなります。
既存の URI を操作するには、完全な URI を
Zend_Uri::factory() に渡します。
例 32.2. Zend_Uri::factory() による既存の URI の操作
<?php
require_once 'Zend/Uri.php';
// 既存の URI を操作するには、それを渡します
$uri = Zend_Uri::factory('http://www.zend.com');
// $uri は Zend_Uri_Http のインスタンスです
?>
このとき、URI のパースと検証が行われます。
もし妥当な形式でなかった場合は、そこで
Zend_Uri_Exception がスローされます。それ以外の場合は
Zend_Uri::factory() は自分自身のサブクラスを返します。
これは、操作するスキームに特化したものとなります。
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');
// $valid は、正しければ TRUE、そうでなければ FALSE となります
?>
Zend_Uri::check() は boolean 値を返します。
これは Zend_Uri::factory()
を使用して例外を処理するよりも便利です。
すべての Zend_Uri のサブクラス (例
Zend_Uri_Http) のインスタンスには、
URI 操作のために便利なインスタンスメソッドがいくつか提供されています。
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 のサブクラスのインスタンスを
(新規に、あるいは既存のものから) 作成し、
それを操作した後でもまだ妥当な形式であるかどうかを調べることもできます。
例 32.6. Zend_Uri_* オブジェクトの検証
<?php
require_once 'Zend/Uri.php';
$uri = Zend_Uri::factory('http://www.zend.com');
$isValid = $uri->valid(); // TRUE
?>
インスタンスメソッド valid() により、
URI オブジェクトが妥当なものかどうかを調べることができます。