PHP基于面向对象封装的分页类示例


Posted in PHP onMarch 15, 2019

本文实例讲述了PHP基于面向对象封装的分页类。分享给大家供大家参考,具体如下:

<?php
  class Page
  {
    protected $num;//每页显示条数
    protected $total;//总记录数
    protected $pageCount;//总页数
    protected $current;//当前页码
    protected $offset;//偏移量
    protected $limit;//分页页码
    /**
     * 构造方法
     * @param int $total 总记录数
     * @param int $num  每页显示条数
     */
    public function __construct($total,$num=5)
    {
      //1.每页显示条数
      $this->num = $num;
      //2.总记录数
      $this->total = $total;
      //3.总页数
      $this->pageCount = ceil($total/$num);
      //4.偏移量
      $this->offset = ($this->current-1)*$num;
      //5.分页页码
      $this->limit = "{$this->offset},{$this->num}";
      //6.初始化当前页
      $this->current();
    }
    /**
     * 初始化当前页
     */
    public function current(){
      $this->current = isset($_GET['page'])?$_GET['page']:'1';
      //判断当前页最大范围
      if ($this->current>$this->pageCount){
        $this->current = $this->pageCount;
      }
      //判断当前页最小范围
      if ($this->current<1){
        $this->current = 1;
      }
    }
    /**
     * 访问没权限访问的属性
     * @param string $key 想访问的属性
     * @return float|int|string 返回对应要改变的条件
     */
    public function __get($key){
      if ($key == "limit") {
        return $this->limit;
      }
      if ($key == "offset") {
        return $this->offset;
      }
      if ($key == "current") {
        return $this->current;
      }
    }
    /**
     * 处理分页按钮
     * @return string 拼接好的分页按钮
     */
    public function show(){
      //判断初始页码
      $_GET['page'] = isset($_GET['page'])?$_GET['page']:'1';
      //将$_GET值赋给上下变量
      $first = $end = $prev = $next = $_GET;
      // var_dump($prev);
      //上一页
      //判断上一页范围
      if ($this->current-1<1){
        $prev['page'] = 1;
      }else{
        $prev['page'] = $this->current-1;
      }
      //下一页
      //判断下一页范围
      if ($this->current+1>$this->pageCount) {
        $next["page"] = $this->pageCount;
      }else{
        $next['page'] = $this->current+1;
      }
      /*
      首页
      $first['page'] = 1; 
      //尾页
      $end['page'] = $this->pageCount;
      */
      //拼接路径
      $url = "http://".$_SERVER["SERVER_NAME"].$_SERVER["SCRIPT_NAME"];
      //拼接数组url地址栏后缀?传入参数
      //http://xxx/xxx/Page.class.php?page=值
      $prev = http_build_query($prev);
      $next = http_build_query($next);
      // $first = http_build_query($first);
      // $end = http_build_query($end);
      //拼接完整路径
      $prevpath = $url."?".$prev;
      $nextpath = $url."?".$next;
      // $firstpath = $url."?".$first;
      // $endpath = $url."?".$end;
      $str = "共有{$this->total}条记录 共有{$this->pageCount}页 ";
      $str .= "<a href='{$url}?page=1'>首页</a> ";
      $str .= "<a href='{$prevpath}'>上一页</a> ";
      $str .= "<a href='{$nextpath}'>下一页</a> ";
      $str .= "<a href='{$url}?page={$this->pageCount}'>尾页</a> ";
      return $str;
    }
  }
  //自行调试
  $a = new Page(10);
  echo $a->show();
?>

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
使用sockets:从新闻组中获取文章(二)
Oct 09 PHP
php checkbox复选框值的获取与checkbox默认值输出方法
May 15 PHP
PHP连接SQLServer2005 的问题解决方法
Jul 19 PHP
php动态实现表格跨行跨列实现代码
Nov 06 PHP
PHP基础之运算符的使用方法
Apr 28 PHP
解析php中的escape函数
Jun 29 PHP
php中stream(流)的用法
Mar 25 PHP
php针对cookie操作的队列操作类实例
Dec 10 PHP
thinkPHP模型初始化实例分析
Dec 03 PHP
PHP+ajax分页实例简析
Dec 07 PHP
php微信开发之谷歌测距
Jun 14 PHP
PHP单元测试配置与使用方法详解
Dec 27 PHP
浅谈PHP无限极分类原理
Mar 14 #PHP
详解PHP队列的实现
Mar 14 #PHP
PHP精确到毫秒秒杀倒计时实例详解
Mar 14 #PHP
PHP的简单跳转提示的实现详解
Mar 14 #PHP
PHP封装的数据库模型Model类完整示例【基于PDO】
Mar 14 #PHP
PHP模型Model类封装数据库操作示例
Mar 14 #PHP
php中pcntl_fork创建子进程的方法实例
Mar 14 #PHP
You might like
php完全过滤HTML,JS,CSS等标签
2009/01/16 PHP
PHP 上传文件的方法(类)
2009/07/30 PHP
php快速url重写 更新版[需php 5.30以上]
2010/04/20 PHP
IE JS编程需注意的内存释放问题
2009/06/23 Javascript
深入理解JavaScript系列(10) JavaScript核心(晋级高手必读篇)
2012/01/15 Javascript
JQuery中根据属性或属性值获得元素(6种情况获取方法)
2013/01/17 Javascript
js使用DOM操作实现简单留言板的方法
2015/04/10 Javascript
JavaScript中实现map功能代码分享
2015/06/11 Javascript
js运动应用实例解析
2015/12/28 Javascript
jQuery实现简洁的轮播图效果实例
2016/09/07 Javascript
node.js实现微信JS-API封装接口的示例代码
2017/09/06 Javascript
js中apply和Math.max()函数的问题及区别介绍
2018/03/27 Javascript
详解es6超好用的语法糖Decorator
2018/08/01 Javascript
jQuery动态操作表单示例【基于table表格】
2018/12/06 jQuery
基于Vue+elementUI实现动态表单的校验功能(根据条件动态切换校验格式)
2019/04/04 Javascript
Node中对非阻塞I/O、事件循环的知识点总结
2020/01/05 Javascript
小程序websocket心跳库(websocket-heartbeat-miniprogram)
2020/02/23 Javascript
JS数据类型判断的几种常用方法
2020/07/07 Javascript
JavaScript中window和document用法详解
2020/07/28 Javascript
vue 插槽简介及使用示例
2020/11/19 Vue.js
python del()函数用法
2013/03/24 Python
用Python展示动态规则法用以解决重叠子问题的示例
2015/04/02 Python
Python中collections模块的基本使用教程
2018/12/07 Python
快速排序的四种python实现(推荐)
2019/04/03 Python
Python字典的概念及常见应用实例详解
2019/10/30 Python
keras模型可视化,层可视化及kernel可视化实例
2020/01/24 Python
TensorFlow实现从txt文件读取数据
2020/02/05 Python
Python字符串格式化f-string多种功能实现
2020/05/07 Python
CSS3中的Transition过度与Animation动画属性使用要点
2016/05/20 HTML / CSS
期中考试后的反思
2014/02/08 职场文书
教师见习期自我鉴定
2014/04/28 职场文书
党员三严三实对照检查材料
2014/10/13 职场文书
群众路线教育实践活动整改落实情况汇报
2014/10/28 职场文书
个人催款函范文
2015/06/24 职场文书
canvas实现贪食蛇的实践
2022/02/15 Javascript
postgreSQL数据库基础知识介绍
2022/04/12 PostgreSQL