How can object-oriented programming principles be applied to improve the design and functionality of a pagination feature in PHP?

Issue: The pagination feature in PHP may become complex and hard to maintain as the code grows. By applying object-oriented programming principles, we can encapsulate pagination logic into a separate class, making it more modular, reusable, and easier to extend or modify.

class Pagination {
    private $totalItems;
    private $itemsPerPage;
    private $currentPage;

    public function __construct($totalItems, $itemsPerPage, $currentPage) {
        $this->totalItems = $totalItems;
        $this->itemsPerPage = $itemsPerPage;
        $this->currentPage = $currentPage;
    }

    public function getTotalPages() {
        return ceil($this->totalItems / $this->itemsPerPage);
    }

    public function getOffset() {
        return ($this->currentPage - 1) * $this->itemsPerPage;
    }

    public function getLimit() {
        return $this->itemsPerPage;
    }

    public function renderPaginationLinks() {
        // Pagination links rendering logic here
    }
}

// Example usage
$totalItems = 100;
$itemsPerPage = 10;
$currentPage = isset($_GET['page']) ? $_GET['page'] : 1;

$pagination = new Pagination($totalItems, $itemsPerPage, $currentPage);
$totalPages = $pagination->getTotalPages();
$offset = $pagination->getOffset();
$limit = $pagination->getLimit();

// Use $offset and $limit in your database query to fetch paginated data