2016-09-24 139 views
0

我想创建一个可以实例化一次的类。不能确保只有一个实例是以单例模式创建的

$ins1,$ins4,$ins3 

是这样创建的:如果已经定义了一个静态变量$ instance,它将被一次又一次地返回。 $ins4,$ins5new创建

$ins1==$ins4 returns true 

实例keyword.When我使用

$ins4==$ins5

也返回TURE。我如何才能确保只有一个实例被创建

<?php 
class Singleton{ 

    private static $instance; 

     public static function getInstance(){ 

      if(!self::$instance){ 
       echo " I AM THE FIRST INSTANCE and i am not from bypass<br>"; 
       self::$instance = new Singleton(); 
       return self::$instance; 
      }else{ 
       echo "i am from bypass<br>"; 
       return self::$instance; 
      } 
     } 

} 

$ins1 = Singleton::getInstance(); 
$ins2 = Singleton::getInstance(); 
echo $ins1==$ins2; 
echo '<br>'; 
$ins3 = Singleton::getInstance(); 

$ins4 = new Singleton(); 
$ins5 = new Singleton(); 

echo $ins4 == $ins5; 
?> 

回答

2

你需要做的构造protectedprivate,否则任何人都可以调用它:

class Singleton { 
    protected __construct() {} 

    public static getInstance() { 
     ... 
    } 
} 

话虽如此,执行像单身这很少是一个好主意。更好的主意是简单地实例化类,并根据需要通过依赖注入传递它;管理实例化和传递的依赖注入容器在这里很有帮助。

相关问题