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 相关文章推荐
SMARTY学习手记
Jan 04 PHP
php include,include_once,require,require_once
Sep 05 PHP
php连接mysql数据库代码
Mar 10 PHP
php Sql Server连接失败问题及解决办法
Aug 07 PHP
PHP中strtotime函数使用方法详解
Nov 27 PHP
php inc文件使用的风险和注意事项
Nov 12 PHP
Yii分页用法实例详解
Dec 04 PHP
php中关于长度计算容易混淆的问题分析
May 27 PHP
php微信开发之百度天气预报
Nov 18 PHP
[原创]PHP正则删除html代码中a标签并保留标签内容的方法
May 23 PHP
PHP实现将几张照片拼接到一起的合成图片功能【便于整体打印输出】
Nov 14 PHP
CentOS7系统搭建LAMP及更新PHP版本操作详解
Mar 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
如何在PHP中使用Oracle数据库(6)
2006/10/09 PHP
php查看请求头信息获取远程图片大小的方法分享
2013/12/25 PHP
PHP结合Jquery和ajax实现瀑布流特效
2016/01/07 PHP
PHP面向对象程序设计之命名空间与自动加载类详解
2016/12/02 PHP
JS 判断undefined的实现代码
2009/11/26 Javascript
Javascript全局变量var与不var的区别深入解析
2013/12/09 Javascript
javascript获取xml节点的最大值(实现代码)
2013/12/11 Javascript
Angular.js与Bootstrap相结合实现表格分页代码
2016/04/12 Javascript
bootstrap和jQuery.Gantt的css冲突 如何解决
2016/05/29 Javascript
BootStrap智能表单demo示例详解
2016/06/13 Javascript
在js代码拼接dom对象到页面上去的模板总结(必看)
2017/02/14 Javascript
AngularJS实现根据不同条件显示不同控件
2017/04/20 Javascript
详解Javascript中new()到底做了些什么?
2018/03/29 Javascript
jQuery插件jsonview展示json数据
2018/05/26 jQuery
vue自定义全局共用函数详解
2018/09/18 Javascript
Angularjs实现数组随机排序的方法
2018/10/02 Javascript
Vue.extend 编程式插入组件的实现
2019/11/18 Javascript
js 压缩图片的示例(只缩小体积,不更改图片尺寸)
2020/10/21 Javascript
nuxt.js写项目时增加错误提示页面操作
2020/11/05 Javascript
[13:40]TI3青蛙君全程回顾 DOTA2我们为梦想再战
2013/09/13 DOTA
Tensorflow轻松实现XOR运算的方式
2020/02/03 Python
django model的update时auto_now不被更新的原因及解决方式
2020/04/01 Python
Python实现自动签到脚本功能
2020/08/20 Python
Python实现敏感词过滤的4种方法
2020/09/12 Python
python 通过exifread读取照片信息
2020/12/24 Python
索引覆盖(Index Covering)查询含义
2012/02/18 面试题
出纳岗位职责范本
2013/12/01 职场文书
小学节能减排倡议书
2014/05/15 职场文书
企业管理标语
2014/06/10 职场文书
普通话宣传标语
2014/06/26 职场文书
2014统计局民主生活会对照检查材料思想汇报
2014/10/02 职场文书
电子商务实训报告总结
2014/11/05 职场文书
2015年七夕情人节活动方案
2015/05/06 职场文书
摩登时代观后感
2015/06/03 职场文书
安全教育主题班会教案
2015/08/12 职场文书
《有余数的除法》教学反思
2016/02/22 职场文书