PHP基于面向对象封装的分页类示例

本文实例讲述了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数据库操作入门教程》、《php+mysqli数据库程序设计技巧总结》、《php面向对象程序设计入门教程》、《PHP数组(Array)操作技巧大全》、《php字符串(string)用法总结》、《PHP网络编程技巧总结》及《php常见数据库操作技巧汇总》

希望本文所述对大家PHP程序设计有所帮助。

(0)

相关推荐

  • 详解PHP队列的实现

    队列是一种特殊的线性表,它只允许在表的前端,可以称之为front,进行删除操作:而在表的后端,可以称之为rear进行插入操作.队列和堆栈一样,是一种操作受限制的线性表,和堆栈不同之处在于:队列是遵循"先进先出"原则,而堆栈遵循的是"先进后出"原则.队列进行插入操作的端称为队尾,进行删除操作的称为队头,只允许在队尾进行插入操作,在队头进行删除操作. 队列的数据元素又称为队列元素,在队尾中插入一个元素称为入队,在队头删除一个元素称为出队.具体实现参考代码: <?p

  • 使用Zookeeper分布式部署PHP应用程序

    Zookper是一种分布式的,开源的,应用于分布式应用的协作服务.它提供了一些简单的操作,使得分布式应用可以基于这些接口实现诸如同步.配置维护和分集群或者命名的服务.Zookper很容易编程接入,它使用了一个和文件树结构相似的数据模型. 虽然ZooKeeper是一个Java应用程序,但C也可以使用.这里就有个PHP的扩展,你可以从PECL中下载,或从GitHub中直接获取PHP-ZooKeeper. 要使用该扩展你首先要安装ZooKeeper.可以从官方网站下载. $ tar zxfv zook

  • 详解PHP的抽象类和抽象方法以及接口总结

    PHP中的抽象类和抽象方法自己用的不多,但是经常会在项目中看到别人使用,同样,今天在看别人的代码的时候,发现使用了抽象类,就总结下: 抽象类: 1.如果一个类中有一个方法是抽象方法,则这个类就是抽象类: 2.抽象类必须加上abstract关键字修饰: 抽象方法: 定义:一个方法如果没有方法体,则这个方法就是抽象方法 1.一个方法没有方法体,直接用分号结束的方法: 2.如果是抽象方法,必须使用abstract抽象关键字形容 注意:1.只要有abstract修饰的类就是抽象类   2.除了在抽象类中

  • Centos7.4环境安装lamp-php7.0教程

    本文实例讲述了Centos7.4环境安装lamp-php7.0的方法.分享给大家供大家参考,具体如下: 一. 环境准备 桥接模式 能访问外网 #ping www.baidu.com ping得通则能到外网 关闭防火墙 #systemctl disable firewalld //禁用防火墙 #systemctl stop firewalld //关闭防火墙 关闭seLinux #vim /etc/selinux/config 改为: SELINUX=disabled 配置yum源 # cd /e

  • PHP-FPM的配置与优化讲解

    PHP-FPM(FastCGI Process Manager:FastCGI进程管理器)是一个PHPFastCGI管理器,用于管理 PHP 进程池.接收和处理 Web 服务器的请求.PHP-FPM 会创建一个主进程,控制何时以及如何把 HTTP 请求转发给一个或多个子进程处理. 全局配置 emergency_restart_threshold = 60(建议值) 如果子进程在 emergency_restart_interval 设定的时间内收到该参数设定次数的 SIGSEGV 或者 SIGB

  • PHP的简单跳转提示的实现详解

    在PHP开发中,尤其是MVC框架或者项目中,会碰到很多跳转情况,比如:登录成功或失败后的跳转等等. 以下以MVC框架开发中为基础,示例讲解: 在基础控制器类中:Conrtoller.class.php <?php /** * 基础控制器类 */ class Controller { /** * 跳转 * $url 目标url * $info 提示信息 * $time 等待时间(单位秒) */ protected function jump($url,$info=NULL,$time=3) { /

  • PHP精确到毫秒秒杀倒计时实例详解

    精确到毫秒秒杀倒计时PHP源码实例,前台js活动展示倒计时,后台计算倒计时时间.每0.1秒定时刷新活动倒计时时间. PHP: // 注意:php的时间是以秒算.js的时间以毫秒算 // 设置时区 date_default_timezone_set('PRC'); //配置每天的活动时间段 $starttimestr = date('Y-m-d H:i:s', strtotime(date('Y-m-d'))); $endtimestr = date('Y-m-d H:i:s', strtotim

  • 浅谈PHP无限极分类原理

    1.递归:程序调用自身的编程技巧称为递归 2.案例: /** * @param 递归 $[name] */ function deeploop(&$i=1){ echo $i; $i++; if($i < 10){ deeploop($i); } } deeploop(); 结果:123456789 3.global /** * @param 递归 $[name] */ $i = 1; function deeploop(){ global $i; //Global的作用是定义全局变量,但是

  • php根据命令行参数生成配置文件详解

    像npm, composer等工具,在开始使用的使用,都需要初始化项目,生成一个项目的配置文件.这种功能的原理是怎么实现的呢? 比如: D:\>npm init --yes Wrote to D:\package.json: { "name": "", "version": "1.0.0", "description": "", "main": "in

  • php-fpm中max_children的配置

    现在nginx + fpm 基本成为主流的配置,其中我们比较关注的是pm.max_chindren的配置 首先,我们关注一个设置: pm = static/dynamic, 这个选项是标识fpm子进程的产生模式: static :表示在fpm运行时直接fork出pm.max_chindren个worker进程 dynamic:表示,运行时fork出start_servers个进程,随着负载的情况,动态的调整,最多不超过max_children个进程. 一般推荐用static,优点是不用动态的判断

随机推荐