How can a custom database class be implemented in PHP MySQLi to streamline database operations and improve code readability?

Implementing a custom database class in PHP MySQLi can streamline database operations and improve code readability by encapsulating database functionality into reusable methods. This allows for better organization of database-related code and reduces code duplication.

class CustomDatabase {
    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 fetchArray($result) {
        return $result->fetch_array();
    }

    public function numRows($result) {
        return $result->num_rows;
    }

    // Add more methods as needed for specific database operations

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

// Example of how to use the custom database class
$db = new CustomDatabase('localhost', 'username', 'password', 'database');

$result = $db->query("SELECT * FROM users");
while ($row = $db->fetchArray($result)) {
    echo $row['username'] . "<br>";
}

$db->close();