What are some best practices for structuring PHP code to manage game states and player actions in a turn-based game like Reversi/Othello?

When managing game states and player actions in a turn-based game like Reversi/Othello, it is important to structure your PHP code in a way that clearly defines the game state, handles player actions, and enforces turn-based gameplay rules.

<?php

class Game {
    private $board; // 2D array representing the game board
    private $currentPlayer; // Player currently taking their turn

    public function __construct() {
        // Initialize the game board and set the starting player
    }

    public function makeMove($row, $col) {
        // Check if the move is valid for the current player
        // Update the game board with the new move
        // Switch to the next player's turn
    }

    public function checkWinCondition() {
        // Check if a player has won the game
    }

    // Other methods for managing game state and player actions
}

?>