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

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

同验证码类,分页也是在个人博客,论坛等网站中不可缺少的方式,通过分页可以在一个界面展示固定条数的数据,而不至于将所有数据全部罗列到一起,实现分页的原理其实就是对数据库查询输出加了一个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);//打印出来上页/下页/首页/尾页……的urlvar_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/zhyunfe/p/6387175.html

你可能感兴趣的文章
【.Net基础03】HttpWebRequest模拟浏览器登陆
查看>>
zTree async 动态参数处理
查看>>
Oracle学习之常见错误整理
查看>>
数据库插入数据乱码问题
查看>>
altium annotate 选项设置 complete existing packages
查看>>
【模式识别与机器学习】——SVM举例
查看>>
【转】IT名企面试:微软笔试题(1)
查看>>
IO流入门-第十章-DataInputStream_DataOutputStream
查看>>
DRF的分页
查看>>
Mysql 模糊匹配(字符串str中是否包含子字符串substr)
查看>>
python:open/文件操作
查看>>
流程控制 Day06
查看>>
Linux下安装Tomcat
查看>>
windows live writer 2012 0x80070643
查看>>
tomcat 和MySQL的安装
查看>>
git常用操作
查看>>
京东SSO单点登陆实现分析
查看>>
u-boot启动第一阶段
查看>>
MySQL批量SQL插入性能优化
查看>>
定义列属性:null,default,PK,auto_increment
查看>>