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下获取客户端ip地址的函数
Mar 15 PHP
PHP __autoload()方法真的影响性能吗?
Mar 30 PHP
php使用NumberFormatter格式化货币的方法
Mar 21 PHP
PHP使用递归方式列出当前目录下所有文件的方法
Jun 02 PHP
浅谈php7的重大新特性
Oct 23 PHP
php正则表达式学习笔记
Nov 13 PHP
PHP数据库连接mysql与mysqli对比分析
Jan 04 PHP
php读取txt文件并将数据插入到数据库
Feb 23 PHP
php的debug相关函数用法示例
Jul 11 PHP
php将文件夹打包成zip文件的简单实现方法
Oct 04 PHP
PHP之十六个魔术方法详细介绍
Nov 01 PHP
详解PHP中的8个魔术常量
Jul 06 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 array的学习笔记
2012/05/16 PHP
PHP使用json_encode函数时不转义中文的解决方法
2014/11/12 PHP
PHP操作MySQL中BLOB字段的方法示例【存储文本与图片】
2017/09/15 PHP
Laravel 5.4前后台分离,通过不同的二级域名访问方法
2019/10/13 PHP
JavaScript中Null与Undefined的区别解析
2015/06/30 Javascript
jQuery地图map悬停显示省市代码分享
2015/08/20 Javascript
JavaScript中的this机制
2016/01/30 Javascript
jquery自定义右键菜单、全选、不连续选择
2016/03/01 Javascript
基于JavaScript实现智能右键菜单
2016/03/02 Javascript
jQuery事件委托之Safari
2016/07/05 Javascript
深入解析桶排序算法及Node.js上JavaScript的代码实现
2016/07/06 Javascript
学习使用Bootstrap栅格系统
2017/05/11 Javascript
vue2.0 axios跨域并渲染的问题解决方法
2018/03/08 Javascript
JS实现中英文混合文字溢出友好截取功能
2018/08/06 Javascript
Vue使用zTree插件封装树组件操作示例
2019/04/25 Javascript
微信小程序实现语音识别转文字功能及遇到的坑
2019/08/02 Javascript
用Python写的图片蜘蛛人代码
2012/08/27 Python
Python根据区号生成手机号码的方法
2015/07/08 Python
Python找出list中最常出现元素的方法
2016/06/14 Python
Python 从列表中取值和取索引的方法
2018/12/25 Python
Keras自定义实现带masking的meanpooling层方式
2020/06/16 Python
python excel多行合并的方法
2020/12/09 Python
python 多线程爬取壁纸网站的示例
2021/02/20 Python
网站开发实习生的自我评价
2013/12/11 职场文书
学校志愿者活动总结
2014/06/27 职场文书
网吧消防安全责任书
2014/07/29 职场文书
前台岗位职责
2015/02/13 职场文书
个人德育工作总结
2015/03/05 职场文书
未婚证明范本
2015/06/15 职场文书
安全教育片观后感
2015/06/17 职场文书
主婚人致辞精选
2015/07/28 职场文书
《围炉夜话》110句人生箴言,精辟有内涵,引人深思
2019/10/23 职场文书
基于Python绘制子图及子图刻度的变换等的问题
2021/05/23 Python
详解redis在微服务领域的贡献
2021/10/16 Redis
Python探索生命起源 matplotlib细胞自动机动画演示
2022/04/21 Python
python turtle绘图
2022/05/04 Python