1 回答
TA贡献1818条经验 获得超7个赞
“我选择了 shift 方法(),因为它删除了数组的第一个元素。”
...当然,但是$coders = ['Paul', 'John', 'Brad'];在您的“random()”函数中,每次都使用原始值重新创建数组。您使用 shift() 所做的更改不会在对“random()”的调用之间保留。即使您删除了它,每次调用$killer->random($coders);它时也会传入原始数组。
您需要$coders在类级别定义为(私有)属性,因此它的值在调用 random() 函数之间保持不变。无需在 random() 函数中声明 $coders,也无需将副本作为参数传递给函数。
像这样的东西:
class Killer {
private $coders = ['Paul', 'John', 'Brad'];
public function random() {
shuffle($this->coders);
$pickedCoder = array_shift($this->coders);
return $pickedCoder;
}
}
接着:
public function testCoderNotKilledTwice()
{
$killer = new Killer();
$deadCoder1 = $killer->random();
$deadCoder2 = $killer->random();
$this->assertNotEquals($deadCoder1, $deadCoder2);
}
当然请记住,您可能还需要考虑数组中不再有足够的项目来返回值的情况。我不知道您希望能够成功运行 random() 函数多少次。
- 1 回答
- 0 关注
- 88 浏览
添加回答
举报