🗣 Wd提问: php分页单例
🤖 Ai回答: 以下是一个基于PHP的分页单例模式实现示例,结合了单例模式和分页功能:
php
class PaginationSingleton
{
// 单例模式相关
private static $instance = null;
private function __construct() {}
private function __clone() {}
public static function getInstance(): PaginationSingleton
{
if (self::$instance === null) {
self::$instance = new self();
}
return self::$instance;
}
// 分页相关属性
private $currentPage = 1;
private $itemsPerPage = 10;
private $totalItems = 0;
private $totalPages = 0;
private $startItem = 0;
// 分页配置方法
public function setCurrentPage(int $page): void
{
$this-currentPage = max(1, $page);
}
public function setItemsPerPage(int $items): void
{
$this-itemsPerPage = max(1, $items);
}
public function setTotalItems(int $total): void
{
$this-totalItems = $total;
$this-calculate();
}
// 分页计算
private function calculate(): void
{
$this-totalPages = (int)ceil($this-totalItems / $this-itemsPerPage);
$this-currentPage = min($this-currentPage, $this-totalPages);
$this-startItem = ($this-currentPage 1) * $this-itemsPerPage;
}
// 获取分页参数
public function getStartItem(): int
{
return $this-startItem;
}
public function getItemsPerPage(): int
{
return $this-itemsPerPage;
}
public function getTotalPages(): int
{
return $this-totalPages;
}
// 分页链接生成
public function generateLinks(string $baseUrl, int $showLinks = 3): string
{
$links = '';
$current = $this-currentPage;
$total = $this-totalPages;
if ($total <= 1) return $links;
// 添加首页
if ($current 1) {
$links .= <a href='{$baseUrl}&page=1'首页</a ;
}
// 添加上一页
if ($current 1) {
$prev = $current 1;
$links .= <a href='{$baseUrl}&page={$prev}'上一页</a ;
}
// 生成分页链接
$start = max(1, $current $showLinks);
$end = min($total, $current + $showLinks);
for ($i = $start; $i <= $end; $i++) {
if ($i == $current) {
$links .= <span class='current'{$i}</span ;
} else {
$links .= <a href='{$baseUrl}&page={$i}'{$i}</a ;
}
}
// 下一页
if ($current < $total) {
$next = $current + 1;
$links .= <a href='{$baseUrl}&page={$next}'下一页</a ;
}
// 末页
if ($current < $total) {
$links .= <a href='{$baseUrl}&page={$total}'末页</a;
}
return <div class='pagination'$links</div;
}
}
使用示例:
php
// 获取单例实例
$pagination = PaginationSingleton::getInstance();
// 设置分页参数
$pagination-setCurrentPage($_GET['page'] ?? 1);
$pagination-setItemsPerPage(10);
$pagination-setTotalItems($totalRecords); // 假设从数据库获取的总记录数
// 获取查询参数
$start = $pagination-getStartItem();
$limit = $pagination-getItemsPerPage();
// 查询数据库示例
$results = $db-query(SELECT * FROM table LIMIT $start, $limit);
// 生成分页链接
echo $pagination-generateLinks($_SERVER['PHP_SELF']);
关键特性说明:
1、单例模式:
通过静态方法getInstance获取唯一实例
私有构造函数和克隆方法防止直接实例化
2、分页功能:
支持设置当前页码、每页数量、总记录数
自动计算总页数和起始位置
提供分页链接生成方法(支持自定义显示链接数量)
3、参数验证:
自动处理非法页码(小于1时重置为1)
自动处理超过总页数的页码
每页数量至少为1
4、分页链接生成:
支持首页/末页/上一页/下一页
可配置显示的页码数量(默认显示当前页前后3个页码)
生成带样式的HTML链接(需要配合CSS)
使用注意事项:
1、建议在控制器层统一处理分页参数
2、数据库查询时要确保使用正确的LIMIT参数
3、需要根据实际项目需求调整CSS样式
4、参数设置顺序建议:
php
$pagination-setItemsPerPage($itemsPerPage);
$pagination-setTotalItems($totalItems);
$pagination-setCurrentPage($currentPage);
扩展建议:
1、可以添加更多参数验证(如正整数检查)
2、支持GET参数名称的自定义(默认是'page')
3、添加分页样式配置选项
4、支持AJAX分页时的JSON输出
5、添加防SQL注入的参数过滤
6、支持分页事件钩子(如before/after计算钩子)
这个实现结合了单例模式和分页功能,可以方便地在项目中统一管理分页参数,同时提供灵活的配置选项和直观的分页显示。
📣 商家广告:





0
IP地址: 186.27.86.98
搜索次数: 0
提问时间: 2025-10-30 15:41:45
🛒 域名购买:
ww.cq.cn
jgqg.cn
wc.chat
lw.gs
ftp.ink
y-b.net
bd.gs
ftp.gs
koupin.com.cn
sjtp.cn
❓️ 热门提问:
电脑怎么登陆云服务器
什么是seo搜索引擎
空间域名服务器
网站优化年度总结
su服务器
热门关键词搜索引擎优化工具效果评测平台
多服务器数据库同步
海外云服务器多少钱
云计算的基础知识
idc机房设备
豌豆Ai站群搜索引擎系统
🌐 域名评估:
bb.ha.cn
uav.sx.cn
ee.qh.cn
qsbq.cn
evtol.js.cn
ll.qh.cn
3lll.cn
car.hi.cn
su7.today
vivo.he.cn
⛏ 最新挖掘:
凯里酸汤鱼
贵阳烤脑花
都匀毛尖茶
花溪牛肉粉
贵阳烤生蚝
贵阳烤豆腐
贵阳纸包鱼
贵阳特色菜
🖌 热门作画:
🤝 关于我们:
豌豆Ai
域名
建站
站群
留痕
推广
评估
源码
开发Ai
工具
日记
价格
加盟
广告
流量
留言
联系
🗨 加入群聊:
🔗 友情链接:
搜尋引擎入口
Svensk sökmotor
ai提问
🧰 站长工具:
Ai工具 whois查询 搜索
📢 温馨提示:本站所有问答由Ai自动创作,内容仅供参考,若有误差请用“联系”里面信息通知我们人工修改或删除。
👉 技术支持:本站由豌豆Ai提供技术支持,使用的最新版:《豌豆Ai站群搜索引擎系统 V.25.10.25》搭建本站。