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 相关文章推荐
10条PHP编程习惯助你找工作
Sep 29 PHP
PHP的一个基础知识 表单提交
Jul 04 PHP
php安全配置 如何配置使其更安全
Dec 16 PHP
div li的多行多列 无刷新分页示例代码
Oct 16 PHP
PHP中ob_start函数的使用说明
Nov 11 PHP
YiiFramework入门知识点总结(图文教程)
Dec 28 PHP
php通过文件头判断格式的方法
May 28 PHP
Thinkphp整合微信支付功能
Dec 14 PHP
Yii2实现增删改查后留在当前页的方法详解
Jan 13 PHP
php实现产品加入购物车功能(1)
Jul 23 PHP
Laravel定时任务的每秒执行代码
Oct 22 PHP
php设计模式之备忘模式分析【星际争霸游戏案例】
Mar 24 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可变函数的经典用法
2013/06/20 PHP
PHP控制前台弹出对话框的实现方法
2016/08/21 PHP
动态表单验证的操作方法和TP框架里面的ajax表单验证
2017/07/19 PHP
IE和firefox浏览器的event事件兼容性汇总
2009/12/06 Javascript
jQuery DOM操作小结与实例
2010/01/07 Javascript
js左侧多级菜单动态的解决方案
2010/02/01 Javascript
js Calender控件使用详解
2015/01/05 Javascript
Node.js开源应用框架HapiJS介绍
2015/01/14 Javascript
JavaScript实现给定时间相加天数的方法
2016/01/25 Javascript
Node.js测试中的Mock文件系统详解
2016/11/21 Javascript
js实现鼠标拖动功能
2017/03/20 Javascript
vue v-on监听事件详解
2017/05/17 Javascript
JS实现元素上下左右移动效果
2017/10/18 Javascript
Vuejs 实现简易 todoList 功能 与 组件实例代码
2018/09/10 Javascript
fastadmin中调用js的方法
2019/05/14 Javascript
基于Node的Axure文件在线预览的实现代码
2019/08/28 Javascript
JavaScript定时器常见用法实例分析
2019/11/15 Javascript
vue 单页应用和多页应用的优劣
2020/10/22 Javascript
js canvas实现五子棋小游戏
2021/01/22 Javascript
Python编程对列表中字典元素进行排序的方法详解
2017/05/26 Python
python之PyMongo使用总结
2017/05/26 Python
python pygame实现五子棋小游戏
2020/10/26 Python
python爬虫之自制英汉字典
2019/06/24 Python
Python3 Tkinkter + SQLite实现登录和注册界面
2019/11/19 Python
Pycharm 2020最新永久激活码(附最新激活码和插件)
2020/09/17 Python
python3 Scrapy爬虫框架ip代理配置的方法
2020/01/17 Python
Python中断多重循环的几种方式详解
2020/02/10 Python
亚马逊意大利站点:Amazon.it
2020/12/31 全球购物
C#面试常见问题
2013/02/25 面试题
幸福家庭标语
2014/06/27 职场文书
2014离婚协议书范文两篇
2014/09/15 职场文书
建筑安全员岗位职责
2015/02/15 职场文书
毕业生入职感言
2015/07/31 职场文书
初任公务员培训心得体会
2016/01/08 职场文书
基于Nginx实现限制某IP短时间访问次数
2021/03/31 Servers
phpQuery解析HTML乱码问题(补充官网未列出的乱码解决方案)
2021/04/01 PHP