第32章 Zend_Uri

目次

32.1. Zend_Uri
32.1.1. 概要
32.1.2. 新しい URI の作成
32.1.3. 既存の URI の操作
32.1.4. URI の検証
32.1.5. 共通のインスタンスメソッド

32.1. Zend_Uri

32.1.1. 概要

Zend_Uri は、 Uniform Resource Identifiers (URIs) の操作および検証を行うためのコンポーネントです。 Zend_Uri の本来の目的は Zend_Http_Client のような他のコンポーネントを支援することですが、 単体で使用しても便利です。

URI の最初は常にスキームから始まり、その後にコロンが続きます。 スキームにはさまざまなものがあります。 Zend_Uri クラスは、 各スキームに特化した自身のサブクラスを返すファクトリメソッドを提供しています。 サブクラスの名前は Zend_Uri_<scheme> となり、<scheme> の部分には スキーム名の最初の文字だけを大文字にしたものがあてはまります。 この規則にはひとつ例外があり、HTTPS スキームについては Zend_Uri_Http で扱われます。

32.1.2. 新しい URI の作成

スキームのみを 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() に渡します [13]。 サポートしていないスキームが渡された場合は、 Zend_Uri_Exception がスローされます。

渡されたスキームあるいは URI をサポートしている場合は、 Zend_Uri::factory() は自分自身のサブクラスを返します。 これは、指定したスキームに特化したものとなります。

32.1.3. 既存の URI の操作

既存の 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() は自分自身のサブクラスを返します。 これは、操作するスキームに特化したものとなります。

32.1.4. URI の検証

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() を使用して例外を処理するよりも便利です。

32.1.5. 共通のインスタンスメソッド

すべての Zend_Uri のサブクラス (例 Zend_Uri_Http) のインスタンスには、 URI 操作のために便利なインスタンスメソッドがいくつか提供されています。

32.1.5.1. 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.1.5.2. 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 全体を文字列として返します。

32.1.5.3. 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 オブジェクトが妥当なものかどうかを調べることができます。



[13] 現時点では、 Zend_Uri がサポートしているスキームは HTTP および HTTPS だけです。