還是說php實現singleton模式
這天考慮用php來singleton一下,看到一篇比較全面的總結 -- singleton模式的幾種實現.其中總結的php5的實現:
PLAIN TEXTPHP:
class MyClass { private static $instance; public static function singleton() { if (!isset(self::$instance)) { $c = __CLASS__; self::$instance = new $c; } return self::$instance; } }
這段代碼拿來使用,不會太爽,因為一般都會繼承自MyClass,而$c = __CLASS__;獲取的始終是基類的類名,不可用。只能考慮找其它實現方法。
接著俺開始查看文章中的函數方式實現的singleton,實現的很不錯,缺點是類被實例化時不能帶參數,這里貼上俺的版本:
PLAIN TEXTPHP:
function getObj() { static $obj = array(); $args = func_get_args(); if(empty($args)) return null; $clazz = $args[0]; if(!is_object($obj[$clazz])) { $cnt = count($args); if($cnt> 1) { for($i = 1, $s = ''; $i <$cnt; $i++) $s[] = '$args[' . $i . ']'; eval('$obj[$clazz] = new $clazz(' . join(',', $s) . ');'); } else { $obj[$clazz] = new $clazz; } } return $obj[$clazz];}
在php5下可以很爽的調用:
PLAIN TEXTPHP:
getObj('MyClass', $param1, $param2)->myMethod();
以前的幼稚版:單子模式(SINGLETON)的簡單實現
http://www.ooso.net/index.php/archives/182
