這天考慮用php(做為現在的主流開發語言)來singleton一下,看到一篇比較全面的總結 -- singleton模式的幾種實現.其中總結的php(做為現在的主流開發語言)5的實現:
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];
}
在php(做為現在的主流開發語言)5下可以很爽的調用:
PLAIN TEXTphp(做為現在的主流開發語言):
getObj(MyClass, $param1, $param2)->myMethod();
以前的幼稚版:
單子模式(SINGLETON)的簡單實現
http://www.ooso.net/index.php(做為現在的主流開發語言)/archives/182