"Я выбрал метод shift (), потому что он УДАЛЯЕТ первый элемент массива."
... конечно, но тогда $coders = ['Paul', 'John', 'Brad'];
внутри вашего "random ()" Функция все равно каждый раз заново создает массив с исходными значениями. Изменения, сделанные вами с помощью shift (), не сохраняются между вызовами функции random (). И даже если вы удалили это, каждый раз, когда вы вызываете $killer->random($coders);
, он также передает исходный массив.
Вам необходимо определить $coders
как (приватное) свойство на уровне класса, поэтому его значение сохраняется между вызовами функции random (). Нет необходимости объявлять $ coders внутри функции random () или передавать копию функции в качестве аргумента.
Примерно так:
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 ().