PHP简单单例不起作用

时间:2017-11-30 15:04:44

标签: php

我正在尝试制作一个singleton pattern,但似乎我在某个地方犯了错误。每当我尝试从类Cart创建一个实例时,它就会创建一个实例。使用setId()getId()函数对其进行了测试。它每次都返回不同的数字。

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();

我做错了什么?对我来说似乎是合法的代码块:/提前谢谢!

1 个答案:

答案 0 :(得分:0)

你的单身人士工作得很好。我用以下代码测试了10次:

$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,它会随时更改。否则始终返回相同的内容。这正是您应该期望的(注意rand(0,10))也可以提供10.

从不超过一个实例