What are best practices for handling object-oriented PHP code when dealing with session variables and database queries?

When dealing with object-oriented PHP code that involves session variables and database queries, it is important to properly manage the session data and handle database interactions efficiently. One best practice is to create a separate class for handling session management and another class for database operations. This separation of concerns helps keep the code organized and maintainable.

// Session management class
class SessionManager {
    public function setSessionVariable($key, $value) {
        $_SESSION[$key] = $value;
    }

    public function getSessionVariable($key) {
        return isset($_SESSION[$key]) ? $_SESSION[$key] : null;
    }

    public function destroySession() {
        session_destroy();
    }
}

// Database operations class
class DatabaseManager {
    private $connection;

    public function __construct($host, $username, $password, $database) {
        $this->connection = new mysqli($host, $username, $password, $database);
    }

    public function query($sql) {
        return $this->connection->query($sql);
    }

    public function escapeString($string) {
        return $this->connection->real_escape_string($string);
    }
}

// Example usage
$sessionManager = new SessionManager();
$databaseManager = new DatabaseManager('localhost', 'username', 'password', 'database');

$sessionManager->setSessionVariable('user_id', 123);

$sql = "SELECT * FROM users WHERE id = " . $databaseManager->escapeString($sessionManager->getSessionVariable('user_id'));
$result = $databaseManager->query($sql);

if ($result->num_rows > 0) {
    // Process the query result
} else {
    // Handle no results
}