私はLaravel Eloquent Modelにコンストラクタを持っています。モデルをインスタンス化すると、コンストラクタが呼び出すメソッドが別のメソッドを呼び出すときに無限ループが発生します。 putPieces function
内$this->putPieceOnBoard
を呼び出した後PHPのコンストラクタは、メソッド内でメソッドを呼び出すときに無限ループを生成します
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();
}
}
は無限ループを取得します。
ここではどうなりますか?
$chessboardCell = ChessboardCell::where('file', $file)
->where('rank', $rank)
->first();
が次にあなたがそうでputPieces()
とによって呼び出されputPieceOnBoard()
によって呼び出され__constructor()
と__constructor()
からputPieces()
を呼び出していることに気づく:すべての通知の
'$ blackPawnsようなコード変更する必要は' putPieces'コールの上に宣言されたオブジェクトの配列を指します。 – Caco
$ blackPawns配列を宣言した場所と方法を表示できますか? –
実際、 '$ blackPawns'は、いくつかのオブジェクトを取得するために他のEloquentモデルメソッドを呼び出す関数によって返された配列を受け取る変数です。私は自分自身を不明確に表現した。 @Ahmadの答えがこの問題を明確にしたので、より多くのコード行を含めるように質問を更新する必要はないと思います。 – Caco