我在Laravel Eloquent Model中有一个构造函数。当我实例化Model时,当构造函数调用的方法调用另一个方法时,我得到了一个无限循环。
class ChessboardCell extends Model
{
//...
public function __construct()
{
parent::__construct();
//...
$this->putPieces('pawn', 'black', $blackPawns);
//...
}
private function putPieces($piece, $player, $piecesArray)
{
//...
if ($piece == 'pawn') {
for ($file = 'a'; $file <= 'h'; $file++) {
$pawnPiece = array_shift($piecesArray);
$this->putPieceOnBoard($file, $rank, $pawnPiece);
}
}
//...
}
public function putPieceOnBoard($file, $rank, $piece)
{
$chessboardCell = ChessboardCell::where('file', $file)
->where('rank', $rank)
->first();
if (is_null($chessboardCell)) {
// Gera excessão: não pegou a célula
}
$chessboardCell->current_piece = $piece->id;
$chessboardCell->save();
}
}
在$this->putPieceOnBoard
内调用putPieces function
后获得无限循环。
这里发生了什么?
答案 0 :(得分:2)
首先请注意,这段代码会调用构造函数:
$chessboardCell = ChessboardCell::where('file', $file)
->where('rank', $rank)
->first();
然后请注意,您正在putPieces()
拨打__constructor()
,而__constructor()
则由putPieceOnBoard()
调用putPieces()
,依此类推,等等。
因此,本案例中的解决方案是单一责任(here)的神圣原则,您从构造函数中删除putPieces()
并将其单独调用。
有关软件设计原则的更多信息,请查看this
答案 1 :(得分:0)
在构造函数中使用$blackPawns
变量。但它来自哪里?
也许你应该像这样改变你的代码
public function __construct($blackPawns)
{
parent::__construct();
//...
$this->putPieces('pawn', 'black', $blackPawns);
//...
}