- 2009-03-05 木 03:44:23
- PHP
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() のようなメソッドも必要なし。
見た目もスッキリ、頭の中もスッキリして保守しやすくなりました。
- 新しい: 自分発信の迷惑メール対策
- 古い: SEO対策が大嫌い