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 相关文章推荐
Php部分常见问题总结
Oct 09 PHP
用PHP连mysql和oracle数据库性能比较
Oct 09 PHP
完美解决dedecms中的[html][/html]和[code][/code]问题
Mar 20 PHP
探讨:php中在foreach中使用foreach ($arr as &amp;$value) 这种类型的解释
Jun 24 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(八)
Jun 23 PHP
使用php实现网站验证码功能【推荐】
Feb 09 PHP
PHP + plupload.js实现多图上传并显示进度条加删除实例代码
Mar 06 PHP
PHP大文件分割上传 PHP分片上传
Aug 28 PHP
PHP unlink与rmdir删除目录及目录下所有文件实例代码
Feb 07 PHP
php抽象方法和普通方法的区别点总结
Oct 13 PHP
laravel csrf排除路由,禁止,关闭指定路由的例子
Oct 21 PHP
PHP Pipeline 实现中间件的示例代码
Apr 26 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
基于mysql的论坛(7)
2006/10/09 PHP
PHP CKEditor 上传图片实现代码
2009/11/06 PHP
php中flush()、ob_flush()、ob_end_flush()的区别介绍
2013/02/17 PHP
PHP实现对文本数据库的常用操作方法实例演示
2014/07/04 PHP
php生成固定长度纯数字编码的方法
2015/07/09 PHP
Thinkphp实现站点静态化的方法详解
2017/03/21 PHP
PHP连接及操作PostgreSQL数据库的方法详解
2019/01/30 PHP
JavaScript/jQuery 表单美化插件小结
2012/02/14 Javascript
Jquery+Ajax+PHP+MySQL实现分类列表管理(上)
2015/10/28 Javascript
引入JavaScript时alert弹出框显示中文乱码问题
2017/09/16 Javascript
解决vue项目报错webpackJsonp is not defined问题
2018/03/14 Javascript
nuxt框架中路由鉴权之Koa和Session的用法
2018/05/09 Javascript
使用async await 封装 axios的方法
2018/07/09 Javascript
深入理解react-router 路由的实现原理
2018/09/26 Javascript
webpack项目使用eslint建立代码规范实现
2019/05/16 Javascript
javascript删除数组元素的七个方法示例
2019/09/09 Javascript
jsonp格式前端发送和后台接受写法的代码详解
2019/11/07 Javascript
vue请求数据的三种方式
2020/03/04 Javascript
Python中List.count()方法的使用教程
2015/05/20 Python
使用Python来做一个屏幕录制工具的操作代码
2020/01/18 Python
PyQt5中向单元格添加控件的方法示例
2020/03/24 Python
Python实现将元组中的元素作为参数传入函数的操作
2020/06/05 Python
Python Charles抓包配置实现流程图解
2020/09/29 Python
python实现经典排序算法的示例代码
2021/02/07 Python
美国儿童运动鞋和服装零售商:Kids Foot Locker
2017/08/05 全球购物
波兰多品牌运动商店:StreetStyle24.pl
2020/09/22 全球购物
大二自我鉴定范文
2013/10/05 职场文书
文科生自我鉴定
2014/02/15 职场文书
人力管理专业毕业生求职信
2014/02/27 职场文书
大学开学计划书
2014/04/30 职场文书
田径运动会通讯稿
2014/09/13 职场文书
2014财务年度工作总结
2014/11/11 职场文书
试用期工作表现自我评价
2015/03/06 职场文书
创业计划书之o2o水果店
2019/08/30 职场文书
Windows 11上手初体验:任务栏和开始菜单等迎来大改
2021/11/21 数码科技
Python制作表白爱心合集
2022/01/22 Python