Сообщение об ошибке указывает, что вы пытаетесь использовать метод BattleInitiated()
для чего-то, что не было объектом.
Судя по вашему коду, проблема в этом цикле, в методе BeginBattle()
:
foreach($this->_players as $player){
$player->BattleInitiated();
}
Что означает, что $ player, по крайней мере, один в вашем массиве, вероятно, не является объектом; может это null
или массив?
Чтобы узнать больше, вы должны использовать var_dump
для отображения содержимого $this->_players
перед циклом, просто чтобы убедиться, что оно содержит то, что вы ожидаете:
public function BeginBattle(){
var_dump($this->_players);
$this->_battleInProgress = TRUE;
foreach($this->_players as $player){
$player->BattleInitiated();
}
}
Если $this->_players
не содержит того, что вы ожидаете, (а это, вероятно, нет!) , вам придется выяснить, почему ...
Учитывая, что $this->_players
модифицируется методом AddPlayer()
, который добавляет то, что он получает, к концу массива, могу поспорить, что AddPlayer()
вызывается хотя бы один раз без правильного $player
в качестве параметра.
Чтобы помочь с этим, вы можете использовать var_dump
на добавляемом $player
:
public function AddPlayer($player){
var_dump($player);
if(!$this->_battleInProgress)
$this->_players[] = $player;
else
return;
//Spit some error
}
Если это var_dump
указывает хотя бы один раз, что $player
не является объектом (например, это null
, или массив, или строка, ...) , это причина вашей фатальной ошибки.