How can object-oriented programming principles be applied to simplify database operations in PHP and reduce code redundancy?

Object-oriented programming principles can be applied to simplify database operations in PHP by creating a Database class that encapsulates all the necessary database functionality. This class can have methods for connecting to the database, executing queries, fetching results, and closing the connection. By using this Database class, code redundancy can be reduced as database operations can be easily reused throughout the application.

class Database {
    private $connection;

    public function __construct($host, $username, $password, $database) {
        $this->connection = new mysqli($host, $username, $password, $database);
        if ($this->connection->connect_error) {
            die("Connection failed: " . $this->connection->connect_error);
        }
    }

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

    public function fetch($result) {
        return $result->fetch_assoc();
    }

    public function close() {
        $this->connection->close();
    }
}

// Example of using the Database class
$db = new Database('localhost', 'username', 'password', 'database');
$result = $db->query("SELECT * FROM users");
while ($row = $db->fetch($result)) {
    echo $row['username'] . "<br>";
}
$db->close();