ホーム > PHP > staticなプロパティの使いどころ

staticなプロパティの使いどころ

[`evernote` not found]
[`grow` not found]
[`livedoor` not found]
[`yahoo` not found]
Delicious にシェア
このエントリーをはてなブックマークに追加

PHP4とPHP5の違うところメモ第2段です。

PHP5からは、static を指定したプロパティは
インスタンス化しなくてもアクセス出来るよう変わりました。
static キーワード

以下のようなオブジェクトの入れ物的な静的クラスがスマートに書けます。
PHP4、5のどちらも register::set($object) でオブジェクトを登録し
register::get($className) で取りだします。

/**
 * PHP4
 */
class register
{
    var $instances = array();

    function & get ( $className )
    {
        $regster =& register::__getInstance();
        if (array_key_exists($className, $regster->instances)) {
            return $regster->instances[$className];
        }
        $result = null;
        return $result;
    }

    function set ( &$object )
    {
        $regster =& register::__getInstance();
        $className = get_class($object);
        $regster->instances[$className] =& $object;
    }

    function & __getInstance ()
    {
        static $register = null;
        if (null === $register) {
            $register = new register;
        }
        return $register;
    }
}

PHP4で静的に get、set メソッドを呼べるようにするには
register自身の唯一のインスタンスを得るために
__getInstance() のようなメソッドを用意して、
get、set メソッドの中でregisterのインスタンスを操作してました。
いわば見かけだけ、静的に見える状態でした。

/**
 * PHP5
 */
class register
{
    private static $instances = array();

    public static function get ( $className )
    {
        if (array_key_exists($className, self::$instances)) {
            return self::$instances[$className];
        }
        return null;
    }

    public static function set ( $object )
    {
        $className = get_class($object);
        self::$instances[$className] = $object;
    }
}

PHP5で static 指定のプロパティは、
インスタンス化してなくても $instances が確保され
各メソッドから self::$instances でアクセスできます。
グローバル空間にプライベートな個室を持つ様なものです。
もちろん __getInstance() のようなメソッドも必要なし。

見た目もスッキリ、頭の中もスッキリして保守しやすくなりました。

コメント:0

コメントフォーム
入力した情報を記憶する
accessLogging

ホーム > PHP > staticなプロパティの使いどころ

Ad
Apache
MySQL
PHP
お気に入り
ん。。。。。。広告
アーカイブ
Ad

ページの上部に戻る