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 相关文章推荐
UCenter Home二次开发指南
May 28 PHP
在PHP中操作Excel实例代码
Apr 29 PHP
PHP游戏编程25个脚本代码
Feb 08 PHP
PHP输出数组中重名的元素的几种处理方法
Sep 05 PHP
php中长文章分页显示实现代码
Sep 29 PHP
php格式化日期和时间格式化示例分享
Feb 24 PHP
php定界符
Jun 19 PHP
PHP封装的Twitter访问类实例
Jul 18 PHP
文件上传之SWFUpload插件(代码)
Jul 30 PHP
thinkphp跨库操作的简单代码实例
Sep 22 PHP
thinkPHP5实现的查询数据库并返回json数据实例
Oct 23 PHP
Yii框架的路由配置方法分析
Sep 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将对象转换成数组的方法(兼容多维数组类型)
2013/06/21 PHP
php cli换行示例
2014/04/22 PHP
php使用ereg验证文件上传的方法
2014/12/16 PHP
javascript KeyDown、KeyPress和KeyUp事件的区别与联系
2009/12/03 Javascript
jquery autocomplete自动完成插件的的使用方法
2010/08/07 Javascript
用表格输出1-1000之间的数字实现代码(附特效)
2013/04/21 Javascript
angularJS与bootstrap结合实现动态加载弹出提示内容
2015/10/16 Javascript
如何解决easyui自定义标签 datagrid edit combobox 手动输入保存不上
2015/12/26 Javascript
谈谈对JavaScript原生拖放的深入理解
2016/09/20 Javascript
js实现界面向原生界面发消息并跳转功能
2016/11/22 Javascript
js代码实现下拉菜单【推荐】
2016/12/15 Javascript
JS正则表达式验证密码格式的集中情况总结
2017/02/23 Javascript
requireJS模块化实现返回顶部功能的方法详解
2017/10/16 Javascript
JS处理数据四舍五入(tofixed与round的区别详解)
2017/10/26 Javascript
JavaScript变量声明var,let.const及区别浅析
2018/04/23 Javascript
node中的cookie的具体使用
2018/09/13 Javascript
js异步上传多张图片插件的使用方法
2018/10/22 Javascript
vue组件中iview的modal组件爬坑问题之modal的显示与否应该是使用v-show
2019/04/12 Javascript
JS异步错误捕获的一些事小结
2019/04/26 Javascript
基于JS开发微信网页录音功能的实例代码
2019/04/30 Javascript
微信小程序云开发详细教程
2019/05/16 Javascript
vue-cli3使用mock数据的方法分析
2020/03/16 Javascript
Javascript摸拟自由落体与上抛运动原理与实现方法详解
2020/04/08 Javascript
详解阿里Node.js技术文档之process模块学习指南
2021/01/04 Javascript
python判断windows系统是32位还是64位的方法
2015/05/11 Python
python利用dir函数查看类中所有成员函数示例代码
2017/09/08 Python
pandas表连接 索引上的合并方法
2018/06/08 Python
pandas如何处理缺失值
2019/07/31 Python
python with (as)语句实例详解
2020/02/04 Python
tensorflow pb to tflite 精度下降详解
2020/05/25 Python
微信html5页面调用第三方位置导航的示例
2018/03/14 HTML / CSS
市场策划求职信
2014/08/07 职场文书
2014年接待工作总结
2014/11/26 职场文书
大学生十八大感想
2015/08/11 职场文书
baselines示例程序train_cartpole.py的ImportError
2022/05/20 Python
Oracle 11g数据库使用expdp每周进行数据备份并上传到备份服务器
2022/06/28 Oracle