Heim >Backend-Entwicklung >PHP-Tutorial >还是说php实现singleton模式

还是说php实现singleton模式

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOriginal
2016-06-01 14:27:261034Durchsuche

这天考虑用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          $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

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn