第26章 Zend_Uri
前のページ |  | 次のページ

## 第26章 Zend_Uri

## 26.1. Zend_Uri

### 26.1.1. 概要

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

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

### 26.1.2. 新しい URI の作成

スキームのみを `Zend_Uri::factory()` に渡すと、 `Zend_Uri` は新しい URI をゼロから作成します。

例 26.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()` は自分自身のサブクラスを返します。 これは、指定したスキームに特化したものとなります。

### 26.1.3. 既存の URI の操作

既存の URI を操作するには、完全な URI を `Zend_Uri::factory()` に渡します。

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

### 26.1.4. URI の検証

`Zend_Uri::check()` 関数を使用すると、 既存の URI の検証のみを行うことができます。

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

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

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

#### 26.1.5.1. URI のスキームの取得

URI のスキームとは、URI でカンマの前にくる部分のことです。 たとえば `http://www.zend.com` のスキームは `http` となります。

例 26.4. `Zend_Uri_*` オブジェクトからのスキームの取得

    <?php

    require_once 'Zend/Uri.php';

    $uri = Zend_Uri::factory('http://www.zend.com');

    $scheme = $uri->getScheme();  // "http"

    ?>

インスタンスメソッド `getScheme()` は、 URI オブジェクトからスキームの部分のみを返します。

#### 26.1.5.2. URI 全体の取得

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

#### 26.1.5.3. URI の検証

`Zend_Uri::factory()` は渡された URI を常に検証しており、 渡された URI が無効な場合は `Zend_Uri` のサブクラスのインスタンスを作成しません。しかし、いったん `Zend_Uri` のサブクラスのインスタンスを (新規に、あるいは既存のものから) 作成し、 それを操作した後でもまだ妥当な形式であるかどうかを調べることもできます。

例 26.6. `Zend_Uri_*` オブジェクトの検証

    <?php

    require_once 'Zend/Uri.php';

    $uri = Zend_Uri::factory('http://www.zend.com');

    $isValid = $uri->valid();  // TRUE

    ?>

インスタンスメソッド `valid()` により、 URI オブジェクトが妥当なものかどうかを調べることができます。

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

前のページ |  | 次のページ
25.5. 動作原理 | ホーム | 第27章 Zend_Validate