2017-11-30 20 views
0

私はsingleton patternを作ろうとしていますが、どこか間違えているようです。たびにクラスCartからインスタンスを作成しようとすると、新しいインスタンスが作成されます。 setId()getId()の機能でテストしました。毎回異なる番号を返します。PHPシンプルシングルトンは動作しません

class Cart 
{ 
    private $cartQuantity = 0; 

    private static $instance; 

    private $id; 

    private function __construct(){} 

    public function addQuantity($quantity){ 
     $this->cartQuantity += $quantity; 
    } 

    public function getQuantity(){ 
     return $this->cartQuantity; 
    } 

    public function setId(){ 
     $this->id = rand(0, 10); 
    } 

    public function getId(){ 
     return $this->id; 
    } 

    public static function startCount(){ 
     if(self::$instance === null){ 
      self::$instance = new Cart(); 
      self::$instance->setId(); 
     } 

     return self::$instance; 
    } 
} 

$inst = Cart::startCount(); 
echo $inst->getId(); 

私は間違っていますか?私にコードの正当なブロックのように見える:/事前にありがとう!

+2

「私は間違っていますか? https://3v4l.org/V9Y9b コードは正常に同じIDを返します。 – svgrafov

+1

はい、私のためにも同様に – musashii

+0

Hm。 OK!どうもありがとうございました!問題はどこか別のものだと思います。それを探し続ける:) –

答えて

0

あなたのシングルトンは完全に機能しています。

$inst = Cart::startCount(); 
echo $inst->getId(); 

$winst = Cart::startCount(); 
echo $inst->getId(); 

$ninst = Cart::startCount(); 
echo $ninst->getId(); 

$ninst->setId(); 
echo $ninst->getId(); 
echo $winst->getId(); 

$ginst = Cart::startCount(); 
echo $ginst->getId(); 

結果::

999444 
555222 
333999 
333444 
111111 
222222 
999999 
888666 
101010999 
000777 

あなたがIDを変更した場合、それは変更をbeeingて続けて、私は次のコードでそれを10回テストしました。それ以外の場合は、常に同じものが返されます。これはまさにあなたが期待するべきものです(rand(0,10)も)10を配信することができます。

は決してありません。