PHP マニュアル
前のページ | 第 19章クラスとオブジェクト (PHP 5) | 次のページ

# パターン

パターンは、最善の手順と良い設計を記述するための手段です。 パターンは、一般的なプログラム上の課題に柔軟な解決策を提供します。

## Factory

Factory パターンにより、実行時にオブジェクトを初期化できるようになります。 オブジェクトを"製造する"ことに似ているため、これは Factory パターンと呼ばれています。 パラメータ化された Factory が、生成するクラス名を引数として受け取ります。

例 19-25. パラメータ化された Factory メソッド

`<?php class Example { // パラメータ化された Factory メソッド public static function factory($type) { if (include_once 'Drivers/' . $type . '.php') { $classname = 'Driver_' . $type; return new $classname; } else { throw new Exception ('Driver not found'); } } } ?>`

このメソドをクラス内で定義することで、実行時に ロードされるドライバを作成できるようになります。 `Example` クラスが、データベース抽象化クラスで、 `MySQL` および `SQLite` ドライバをロードするとすると以下のように行うことができます。

`<?php // MySQL ドライバをロード $mysql = Example::factory('MySQL'); // SQLite ドライバをロード $sqlite = Example::factory('SQLite'); ?>`

## Singleton

Singleton パターンは、クラスのインスタンスが一つだけであることが 必要である場合に適用されます。 この最も一般的な例は、データベースへの接続です。 このパターンを実装することで、プログラマは この単一のインスタンスが他の多くのオブジェクトから容易に アクセスできるようにすることができます。

例 19-26. Singleton 関数

`<?php
class Example
{
// クラスのインスタンスを保持する
private static $instance;
// private なコンストラクタ。オブジェクトが直接生成されるのを防ぐ
private function __construct()
{
echo 'I am constructed';
}
// singleton メソッド
public static function singleton()
{
if (!isset(self::$instance)) {
$c = __CLASS__;
self::$instance = new $c;
}
return self::$instance;
}
// とあるメソッド
public function bark()
{
echo 'Woof!';
}
// ユーザーがインターフェースを複製するのを防ぐ
public function __clone()
{
trigger_error('Clone is not allowed.', E_USER_ERROR);
}
}
?>`

このコードにより、`Example` クラスのインスタンスが一つ 作られ、取得されます。

`<?php // コンストラクタが private であるため、これは失敗します $test = new Example; // これにより、クラスの単一のインスタンスを取得します。 $test = Example::singleton(); $test->bark(); // これにより、E_USER_ERROR が発生する $test_clone = clone $test; ?>`

前のページ | ホーム | 次のページ
オブジェクトのイタレーション | 上に戻る | マジックメソッド