程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> 還是說php實現singleton模式

還是說php實現singleton模式

編輯:關於PHP編程

這天考慮用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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved