php分页实现类库实现
PHP 分页实现类库
在PHP中实现分页功能可以通过自定义类库或使用现有第三方库完成。以下是几种常见实现方式:
自定义分页类实现
基础分页类示例代码:
class Pagination {
private $totalItems;
private $itemsPerPage;
private $currentPage;
private $totalPages;
private $maxPagesToShow = 5;
public function __construct($totalItems, $itemsPerPage, $currentPage) {
$this->totalItems = $totalItems;
$this->itemsPerPage = $itemsPerPage;
$this->currentPage = $currentPage;
$this->totalPages = ceil($totalItems / $itemsPerPage);
}
public function getHtml() {
$html = '<div class="pagination">';
if ($this->totalPages > 1) {
// 上一页
if ($this->currentPage > 1) {
$html .= '<a href="?page='.($this->currentPage-1).'">«</a>';
}
// 页码
$start = max(1, $this->currentPage - floor($this->maxPagesToShow/2));
$end = min($this->totalPages, $start + $this->maxPagesToShow - 1);
for ($i = $start; $i <= $end; $i++) {
$active = ($i == $this->currentPage) ? 'active' : '';
$html .= '<a class="'.$active.'" href="?page='.$i.'">'.$i.'</a>';
}
// 下一页
if ($this->currentPage < $this->totalPages) {
$html .= '<a href="?page='.($this->currentPage+1).'">»</a>';
}
}
$html .= '</div>';
return $html;
}
}
使用方式:
$totalItems = 100; // 总记录数
$itemsPerPage = 10; // 每页显示数
$currentPage = isset($_GET['page']) ? $_GET['page'] : 1;
$pagination = new Pagination($totalItems, $itemsPerPage, $currentPage);
echo $pagination->getHtml();
使用第三方库
-
Pagerfanta 安装:

composer require pagerfanta/pagerfanta基本用法:
use Pagerfanta\Pagerfanta; use Pagerfanta\Adapter\ArrayAdapter; $adapter = new ArrayAdapter($yourDataArray); $pagerfanta = new Pagerfanta($adapter); $pagerfanta->setMaxPerPage(10); $pagerfanta->setCurrentPage($_GET['page'] ?? 1); // 获取当前页数据 $currentPageResults = $pagerfanta->getCurrentPageResults(); // 渲染分页 echo $pagerfanta->getCurrentPage(); -
Laravel Pagination Laravel内置分页功能:

$users = DB::table('users')->paginate(15); return view('user.index', ['users' => $users]);在视图中显示:
{{ $users->links() }}
数据库分页查询
MySQL分页查询示例:
$page = isset($_GET['page']) ? (int)$_GET['page'] : 1;
$perPage = 10;
$offset = ($page - 1) * $perPage;
$sql = "SELECT * FROM articles LIMIT $offset, $perPage";
$result = $conn->query($sql);
前端配合
Bootstrap分页样式示例:
<nav aria-label="Page navigation">
<ul class="pagination">
<li class="page-item"><a class="page-link" href="#">Previous</a></li>
<li class="page-item active"><a class="page-link" href="#">1</a></li>
<li class="page-item"><a class="page-link" href="#">2</a></li>
<li class="page-item"><a class="page-link" href="#">3</a></li>
<li class="page-item"><a class="page-link" href="#">Next</a></li>
</ul>
</nav>
性能优化建议
- 对于大数据量分页,避免使用
LIMIT offset, count方式,改用基于游标的分页 - 缓存分页结果减少数据库查询
- 预计算总页数避免每次请求都计算
- 使用AJAX实现无刷新分页
以上方法可根据项目需求选择合适的分页实现方案,复杂项目推荐使用成熟的第三方库如Pagerfanta,简单项目可使用自定义分页类。






