2016-09-24 1 views
0

一度インスタンス化できるクラスを作成しようとしています。シングルトンパターンでインスタンスが1つしか作成されないことを確認できません

$ins1,$ins4,$ins3 

は、静的変数$ instanceがすでに定義されている場合、何度も何度も返されるように作成されます。私は

$ins4==$ins5

を使用keyword.When newで作成され$ins4,$ins5

$ins1==$ins4 returns true 

インスタンスは、それはまた、トゥーレを返しました。 どのように私は、唯一のインスタンスが作成されることを確認することができますprotectedまたはprivate、そうでなければ、誰もがそれを呼び出すことができますあなたはコンストラクタを作成する必要があり

<?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

class Singleton { 
    protected __construct() {} 

    public static getInstance() { 
     ... 
    } 
} 

は言って、そのようなシングルトンを強化これはめったに良い考えではありません。より良いアイデアは、クラスを一度しかインスタンス化せずに、必要に応じて依存性注入によってクラスを渡すことです。インスタンス化と渡しを管理する依存性注入コンテナがここで役立ちます。

関連する問題