博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PHP面向对象(OOP)----分页类
阅读量:5317 次
发布时间:2019-06-14

本文共 4486 字,大约阅读时间需要 14 分钟。

同验证码类,分页也是在个人博客,论坛等网站中不可缺少的方式,通过分页可以在一个界面展示固定条数的数据,而不至于将所有数据全部罗列到一起,实现分页的原理其实就是对数据库查询输出加了一个limit限制,接下来我们就开始准备今天分页类的逻辑

逻辑准备

实现分页,我们需要获取准备以下属性和方法

属性{  	数据总条数    每一页显示的条数    计算出总页数    获取当前是第几页    显示上一页    显示下一页    显示首页    显示尾页    每一页的url    数据限制limit}方法{  构造函数    计算总页数    获取当前页    获取上一页    获取下一页    获取首页    获取尾页    获取当前页面url    获取上一页url    获取下一页url    获取首页url    获取尾页irl    生成limit记录    重新生成url地址    显示分页链接,显示分页情况}

根据上面的逻辑,下一步将文字转换为代码

首先,我们先声明一个Page类,按照逻辑进行属性声明,并且进行初始化

class Page{ 	//记录总条数	protected $total; //每页显示几条 protected $nums; //总页数 protected $totalPages; //当前页码 protected $currentPage; //上一页页码 protected $prevPage; //下一页页码 protected $nextPage; //首页页码 protected $firstPage; //尾页页码 protected $endPage; //url protected $url; //limit,传到数据库的limit protected $limit; //构造函数,初始化 public function __construct($total, $nums) { $this->total = $total; $this->nums = $nums; $this->totalPages = $this->getTotalPages(); $this->currentPage = $this->getCurrentPage(); $this->getPrevPage(); $this->getNextPage(); $this->getFirstPage(); $this->getEndPage(); $this->getUrl(); } }

接下来我们开始完善方法

  • 计算总页数
protected funciton getTotalPages()  {    return ceil($this->total / $this->$nums);  }
  • 获取当前页码
protected function getCurentPage() { //判断如果存在page参数并且page大于0,返回实际值,否则返回1 if(isset($_GET['page']) && intval($_GET['page']) > 0) { $this->currentPage = intval($_GET['page']); } else { $this->currentPage = 1; } return $this->currentPage; }
  • 获取上一页
protected function getPrevPage() { $this->prevPage = $this->currentPage - 1; if($this->prevPage < 1) { $this->prevPage = 1; } return $this->prevPage; }
  • 获取下一页
protected function getNextPage() { $this->nextPage = $this->currentPage + 1; return $this->nextPage; }
  • 获取首页
protected function getFirstPage() { $this->firstPage = 1; return $this->firstPage; }
  • 获取尾页
protected function getEndPage() { $this->endPage = $this->totalPages; return $this->endPage; }

接下来开始拼接每个页码的url

  • 获取当前页的url
protected function getCurrentUrl() { return $this->url.'$page='.$this->currentPage; }
  • 获取前一页的url
protected function getPrevUrl() { return $this->url.'&page='.$this->prevPage; }
  • 获取下一页的url
protected function getNextUrl() { return $this->url.'&page='.$this->nextPage; }
  • 获取首页的url
protected function getFirstUrl() { return $this->url.'&page='.$this->firstPage; }
  • 获取尾页的url
protected function getEndUrl() { return $this->url.'&page='.$this->endPage; }

生成limit记录

public function limit() { return ($this->currentPage - 1) * $this->nums.','.$this->nums; }

生成url地址

public function getUrl() { //获取当前页面的文件位置 $url = $_SERVER['REQUEST_URI']; //将url参数解析成数组 $parse = parse_url($url); //获得域名地址 $path = $parse['path']; //获取参数 $query = isset($parse['query']) ? $parse['query'] : false; //如果有参数,把page这个参数先给干掉,因为我们要重新拼接 if($query) { parse_str($query,$query); //干掉page参数,保留其他参数 unset($query['page']); //http_build_query拼将参数拼接成请求 $uri = $parse['path'].'?'.http_build_query($query); } else { $uri = rtrim($parse['path'],'?').'?'; } //智能识别https和http协议和端口号 $protocal = (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) ? 'https://' : 'http://'; switch ($_SERVER['SERVER_PORT']) { case 80: case 443: $uri = $protocal.$_SERVER['SERVER_NAME'].$uri; break; default: $uri = $protocal.$_SERVER['SERVER_NAME'].':'.$_SERVER['SERVER_PORT'].$uri; break; } $this->url = $uri; }

到此所有的逻辑方面都已经处理完啦,接下来的render()函数用来显示分页的链接

public function render() { return array( ['first' => $this->getFirstUrl()], ['prev' => $this->getPrevUrl()], ['current' => $this->getCurrentUrl()], ['next' => $this->getNextUrl()], ['end' => $this->getEndUrl()] ); }

哦也,就这么愉快的结束啦

使用方法如下

//new一个对象$page = new Page(102,10);//打印出来上页/下页/首页/尾页……的url var_dump($page->render());

后记


$url = http://www.zhyunfe.com/OOP/Page.class.php?page=1parse_url($url):将url的文件路径和参数分开并保存到数组中   .......................................... .  array (size=2) .	'path' => string '/OOP/Page.class.php' (length=36) . 'query' => string 'page=1' (length=6) .......................................... ... $query = "page=1&num=2&sex=男" parse_str($query,$query):将带参数的字符串解析成数组 .......................................... . array . 'page' => 1 . 'num' => 2 . 'sex' => '男' .......................................... ... $query = ['num'=>1,'sex'=>'男'] http_build_query($query):使用给出的关联(或下标)数组生成一个经过 URL-encode 的请求字符串。 ......................................... . string . "num=1&&sex='男'" ......................................... ... $_SERVER['SERVER_PORT'] 获取端口号 $_SERVER['SERVER_NAME'] 当前运行脚本所在的服务器的主机名。如果脚本运行于虚拟主机中,该名称是由那个虚拟主机所设置的值决定

转载于:https://www.cnblogs.com/ghjbk/p/6672135.html

你可能感兴趣的文章
php仿阿里巴巴,php实现的仿阿里巴巴实现同类产品翻页
查看>>
Node 中异常收集与监控
查看>>
Excel-基本操作
查看>>
面对问题,如何去分析?(分析套路)
查看>>
Excel-逻辑函数
查看>>
面对问题,如何去分析?(日报问题)
查看>>
nodejs vs python
查看>>
poj-1410 Intersection
查看>>
Java多线程基础(一)
查看>>
TCP粘包拆包问题
查看>>
SQL Server中利用正则表达式替换字符串
查看>>
POJ 1015 Jury Compromise(双塔dp)
查看>>
论三星输入法的好坏
查看>>
Linux 终端连接工具 XShell v6.0.01 企业便携版
查看>>
JS写一个简单日历
查看>>
Python 发 邮件
查看>>
mysql忘记密码的解决办法
查看>>
全面分析Java的垃圾回收机制2
查看>>
[Code Festival 2017 qual A] C: Palindromic Matrix
查看>>
修改博客园css样式
查看>>