PHP在类中创建get_instance方法的原因

P. *_*ski 1 php oop class instance

我有一个小问题,我认为这是一个愚蠢的问题。我开始编写OOP编码,并且在Internet上看到很多具有以下代码段的类:

public static $istance;
public function __construct(){
  //some code...
  $this->instance = $this;
}
public function get_instance(){
  return $this->instance;
}
Run Code Online (Sandbox Code Playgroud)

我的问题是:原因是什么?

Dmi*_*Net 5

这是单例的不良实现http://en.wikipedia.org/wiki/Singleton_pattern

简短地说:Singleton是设计模式,它可以确保单线程应用程序将是具有全局访问点的类的唯一实例。

正确实现

 class Singleton {
     protected static $instance;
     private function __construct(){ /* ... @return Singleton */ }
     private function __clone()    { /* ... @return Singleton */ } 
     private function __wakeup()   { /* ... @return Singleton */ }  
     public static function getInstance()  {
         if ( !isset(self::$instance) ) {
             self::$instance = new self();
         }
         return self::$instance;
     }
     public function doAction() { /* ... */ }
  }
Run Code Online (Sandbox Code Playgroud)

通话实例

  Singleton::getInstance()->doAction();
Run Code Online (Sandbox Code Playgroud)