直接用现成pagination类最省事:三步初始化(传当前页、每页条数、总数)、设请求uri自动处理参数、调用show()输出语义化html;手写showpage易出url混乱、页码越界等bug;现代框架数据库层paginate()更彻底,自动sql优化与分页数据返回。

直接用现成的 Pagination 类最省事,别自己从零写 showPage() 那种逻辑绕、边界多、易出 bug 的封装。
用 Pagination 类三步初始化就跑起来
不是所有“封装”都叫省事——很多老式类(比如传 $pageNum, $pageCount, $url 三个参数再手动拼链接的)要反复处理 $_GET、判断 ? 和 &、过滤非分页参数,一不留神就生成错误 URL。
-
$pagination = new Pagination($currentPage, $pageSize, $totalCount)—— 构造时只管数据量和当前页,不碰 URL -
$pagination->set_link($_SERVER['REQUEST_URI'])—— 自动剥离page=参数并保留其他查询项(如?cat=2&sort=desc) -
$pagination->show()—— 输出带语义的 HTML,含首页/尾页/省略号/当前高亮,无需手动拼a标签
为什么别手写 showPage() 这类函数
你看到的示例里,showPage($pageNum, $pageCount, $url, $Count=5) 看似简单,但实际调用时极易踩坑:
- 传错
$pageCount(比如没用ceil($total / $pageSize)计算,而是硬写死100),会导致“下一页”点开 404 -
$url若含page=3,代码里只做strpos($url, '?')判断,不会删旧参数,结果变成?page=3&page=5,后端取值混乱 - 页码范围计算(
$startPage/$endPage)在$pageNum接近边界时容易越界,比如总页数 7、显示 5 个页码、当前页为 6,本该显示3 4 5 6 7,却可能输出4 5 6 7 8
数据库层直接用 paginate() 更彻底
如果你用的是现代库(比如 MysqliDb 或 ThinkPHP),根本不用自己封装分页类——数据库操作层已内置分页支持:
-
$db->pageLimit = 15;设置每页条数 -
$data = $db->paginate('users', $page, 'id,name,email');一行返回数据 + 自动计算totalCount和totalPages - 它底层执行的是
SELECT SQL_CALC_FOUND_ROWS ... LIMIT ...+SELECT FOUND_ROWS(),比先查总数再查数据更高效 - 避免了“查一次总数、再查一次带 limit 的数据”这种冗余 IO
真正省事的关键,是让分页逻辑下沉到数据获取环节,而不是在模板里靠一堆 if 和循环去拼 HTML。边界判断、URL 重建、SQL 优化这些脏活,交给经过验证的类或框架去做,你只负责传对 $page 和 $pageSize 就行。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











