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 相关文章推荐
基于mysql的bbs设计(五)
Oct 09 PHP
奇怪的PHP引用效率问题分析
Mar 23 PHP
PHP中的reflection反射机制测试例子
Aug 05 PHP
php中http与https跨域共享session的解决方法
Dec 20 PHP
浅谈本地WAMP环境的搭建
May 13 PHP
CI框架源码解读之利用Hook.php文件完成功能扩展的方法
May 18 PHP
总结PHP中DateTime的常用方法
Aug 11 PHP
php微信公众号开发之图片回复
Oct 20 PHP
ThinkPHP3.2框架操作Redis的方法分析
May 05 PHP
PHP钩子实现方法解析
May 21 PHP
laravel Task Scheduling(任务调度)在windows下的使用详解
Oct 22 PHP
PHP基于进程控制函数实现多线程
Dec 09 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解析xml提示Invalid byte 1 of 1-byte UTF-8 sequence错误的处理方法
2013/11/14 PHP
CI框架(ajax分页,全选,反选,不选,批量删除)完整代码详解
2016/11/01 PHP
php 下 html5 XHR2 + FormData + File API 上传文件操作实例分析
2020/02/28 PHP
2020最新版 PhpStudy V8.1版本下载安装使用详解
2020/10/30 PHP
JS判断页面加载状态以及添加遮罩和缓冲动画的代码
2012/10/11 Javascript
JS格式化数字保留两位小数点示例代码
2013/10/15 Javascript
JavaScript极简入门教程(一):基础篇
2014/10/25 Javascript
24款热门实用的jQuery插件推荐
2014/12/24 Javascript
jQuery实现可以编辑的表格实例详解【附demo源码下载】
2016/07/09 Javascript
JavaScript兼容性总结之获取非行间样式案例
2016/08/07 Javascript
一步一步封装自己的HtmlHelper组件BootstrapHelper(二)
2016/09/14 Javascript
js实现漫天星星效果
2017/01/19 Javascript
利用Javascript裁剪图片并存储的简单实现
2017/03/13 Javascript
利用JavaScript对中文(汉字)进行排序实例详解
2017/06/18 Javascript
Vue.use源码学习小结
2018/06/20 Javascript
NodeJS实现同步的方法
2019/03/02 NodeJs
点击按钮弹出模态框的一系列操作代码实例
2019/03/29 Javascript
微信小程序如何再次获取用户授权的方法
2019/05/10 Javascript
微信小程序实现点击按钮后修改颜色
2019/12/05 Javascript
js+canvas绘制图形验证码
2020/09/21 Javascript
ES6 十大特性简介
2020/12/09 Javascript
[52:09]2014 DOTA2华西杯精英邀请赛 5 25 NewBee VS DK第二场
2014/05/26 DOTA
python+opencv实现动态物体追踪
2018/01/09 Python
使用Filter过滤python中的日志输出的实现方法
2019/07/17 Python
python2.7实现复制大量文件及文件夹资料
2019/08/31 Python
使用pytorch完成kaggle猫狗图像识别方式
2020/01/10 Python
pandas读取csv文件提示不存在的解决方法及原因分析
2020/04/21 Python
10分钟理解CSS3 Grid布局
2018/12/20 HTML / CSS
Lookfantastic澳大利亚官网:英国知名美妆购物网站
2021/01/07 全球购物
在浏览器端如何得到服务器端响应的XML数据
2012/11/24 面试题
内部类的定义、种类以及优点
2013/10/16 面试题
出纳会计岗位职责
2014/03/12 职场文书
装修活动策划方案
2014/08/27 职场文书
贷款收入证明格式
2015/06/24 职场文书
劳动模范获奖感言
2015/07/31 职场文书
Jpa Specification如何实现and和or同时使用查询
2021/11/23 Java/Android