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核心代码分析require和include的区别
Jan 02 PHP
PHP生成指定随机字符串的简单实现方法
Apr 01 PHP
PHP生成plist数据的方法
Jun 16 PHP
PHP使用file_get_content设置头信息的方法
Feb 14 PHP
php实现生成验证码实例分享
Apr 10 PHP
PHP自动补全表单的两种方法
Mar 06 PHP
php获取数据库中数据的实现方法
Jun 01 PHP
基于ThinkPHP5.0实现图片上传插件
Sep 25 PHP
浅谈PHP中pack、unpack的详细用法
Mar 12 PHP
PHP面向对象程序设计重载(overloading)操作详解
Jun 13 PHP
解决windows上php xdebug 无法调试的问题
Feb 19 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
后宫无数却洁身自好的男主,唐三只爱小舞
2020/03/02 国漫
利用“多说”制作留言板、评论系统
2015/07/14 PHP
详解PHP实现执行定时任务
2015/12/21 PHP
Laravel5.1 框架响应基本用法实例分析
2020/01/04 PHP
小议Function.apply() 之一------(函数的劫持与对象的复制)
2006/11/30 Javascript
FireFox JavaScript全局Event对象
2009/06/14 Javascript
js 优化次数过多的循环 考虑到性能问题
2011/03/05 Javascript
JS验证控制输入中英文字节长度(input、textarea等)具体实例
2013/06/21 Javascript
jQuery取得iframe中元素的常用方法详解
2016/01/14 Javascript
微信小程序 Template详解及简单实例
2017/01/05 Javascript
HTML中使背景图片自适应浏览器大小实例详解
2017/04/06 Javascript
Angular X中使用ngrx的方法详解(附源码)
2017/07/10 Javascript
JS实现websocket长轮询实时消息提示的效果
2017/10/10 Javascript
Node.js模块全局安装路径配置方法
2018/05/17 Javascript
详解webpack运行Babel教程
2018/06/13 Javascript
jQuery使用$.extend(true,object1, object2);实现深拷贝对象的方法分析
2019/03/06 jQuery
vue element-ui实现input输入框金额数字添加千分位
2019/12/29 Javascript
详解jQuery中的prop()使用方法
2020/01/05 jQuery
python爬虫入门教程之糗百图片爬虫代码分享
2014/09/02 Python
Python变量和数据类型详解
2017/02/15 Python
python创造虚拟环境方法总结
2019/03/04 Python
详解用python写网络爬虫-爬取新浪微博评论
2019/05/10 Python
简单了解python的break、continue、pass
2019/07/08 Python
python如何实现数据的线性拟合
2019/07/19 Python
VSCode基础使用与VSCode调试python程序入门的图文教程
2020/03/30 Python
Html5内唤醒百度、高德APP的实现示例
2019/05/20 HTML / CSS
贝嫂喜欢的婴儿品牌,个性化的婴儿礼物:My 1st Years
2017/11/19 全球购物
怎样自定义一个异常类
2016/09/27 面试题
HR喜欢的自荐信格式
2013/10/08 职场文书
大学生标准推荐信范文
2013/11/25 职场文书
学习党的群众路线教育实践活动心得体会
2014/03/01 职场文书
本科毕业生应聘自荐信范文
2014/06/26 职场文书
出生公证书
2015/01/23 职场文书
学生党支部工作总结2015
2015/05/26 职场文书
有关骆驼祥子的读书笔记
2015/06/26 职场文书
Pandas数据类型之category的用法
2021/06/28 Python