我正在尝试制作一个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();
我做错了什么?对我来说似乎是合法的代码块:/提前谢谢!
答案 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.
从不超过一个实例。