PHP面向对象(OOP)----分页类

PHP面向对象(OOP)----分页类

同验证码类,分页也是在个人博客,论坛等网站中不可缺少的方式,通过分页可以在一个界面展示固定条数的数据,而不至于将所有数据全部罗列到一起,实现分页的原理其实就是对数据库查询输出加了一个limit限制,接下来我们就开始准备今天分页类的逻辑

逻辑准备

实现分页,我们需要获取准备以下属性和方法

属性{数据总条数每一页显示的条数计算出总页数获取当前是第几页显示上一页显示下一页显示首页显示尾页每一页的url数据限制limit
}
方法{构造函数计算总页数获取当前页获取上一页获取下一页获取首页获取尾页获取当前页面url获取上一页url获取下一页url获取首页url获取尾页irl生成limit记录重新生成url地址显示分页链接,显示分页情况
}

根据上面的逻辑,下一步将文字转换为代码

首先,我们先声明一个Page类,按照逻辑进行属性声明,并且进行初始化

class Page
{//记录总条数protected $total; //每页显示几条 protected $nums; //总页数 protected $totalPages; //当前页码 protected $currentPage; //上一页页码 protected $prevPage; //下一页页码 protected $nextPage; //首页页码 protected $firstPage; //尾页页码 protected $endPage; //url protected $url; //limit,传到数据库的limit protected $limit; //构造函数,初始化 public function __construct($total, $nums) { $this->total = $total; $this->nums = $nums; $this->totalPages = $this->getTotalPages(); $this->currentPage = $this->getCurrentPage(); $this->getPrevPage(); $this->getNextPage(); $this->getFirstPage(); $this->getEndPage(); $this->getUrl(); } } 

接下来我们开始完善方法

  • 计算总页数
protected funciton getTotalPages(){return ceil($this->total / $this->$nums);}
  • 获取当前页码
protected function getCurentPage() { //判断如果存在page参数并且page大于0,返回实际值,否则返回1 if(isset($_GET['page']) && intval($_GET['page']) > 0) { $this->currentPage = intval($_GET['page']); } else { $this->currentPage = 1; } return $this->currentPage; } 
  • 获取上一页
protected function getPrevPage() { $this->prevPage = $this->currentPage - 1; if($this->prevPage < 1) { $this->prevPage = 1; } return $this->prevPage; } 
  • 获取下一页
protected function getNextPage() { $this->nextPage = $this->currentPage + 1; return $this->nextPage; } 
  • 获取首页
protected function getFirstPage() { $this->firstPage = 1; return $this->firstPage; } 
  • 获取尾页
protected function getEndPage() { $this->endPage = $this->totalPages; return $this->endPage; } 

接下来开始拼接每个页码的url

  • 获取当前页的url
protected function getCurrentUrl() { return $this->url.'$page='.$this->currentPage; } 
  • 获取前一页的url
protected function getPrevUrl() { return $this->url.'&page='.$this->prevPage; } 
  • 获取下一页的url
protected function getNextUrl() { return $this->url.'&page='.$this->nextPage; } 
  • 获取首页的url
protected function getFirstUrl() { return $this->url.'&page='.$this->firstPage; } 
  • 获取尾页的url
protected function getEndUrl() { return $this->url.'&page='.$this->endPage; } 

生成limit记录

public function limit() { return ($this->currentPage - 1) * $this->nums.','.$this->nums; } 

生成url地址

public function getUrl() { //获取当前页面的文件位置 $url = $_SERVER['REQUEST_URI']; //将url参数解析成数组 $parse = parse_url($url); //获得域名地址 $path = $parse['path']; //获取参数 $query = isset($parse['query']) ? $parse['query'] : false; //如果有参数,把page这个参数先给干掉,因为我们要重新拼接 if($query) { parse_str($query,$query); //干掉page参数,保留其他参数 unset($query['page']); //http_build_query拼将参数拼接成请求 $uri = $parse['path'].'?'.http_build_query($query); } else { $uri = rtrim($parse['path'],'?').'?'; } //智能识别https和http协议和端口号 $protocal = (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) ? 'https://' : 'http://'; switch ($_SERVER['SERVER_PORT']) { case 80: case 443: $uri = $protocal.$_SERVER['SERVER_NAME'].$uri; break; default: $uri = $protocal.$_SERVER['SERVER_NAME'].':'.$_SERVER['SERVER_PORT'].$uri; break; } $this->url = $uri; } 

到此所有的逻辑方面都已经处理完啦,接下来的render()函数用来显示分页的链接

public function render() { return array( ['first' => $this->getFirstUrl()], ['prev' => $this->getPrevUrl()], ['current' => $this->getCurrentUrl()], ['next' => $this->getNextUrl()], ['end' => $this->getEndUrl()] ); } 

哦也,就这么愉快的结束啦

使用方法如下

//new一个对象
$page = new Page(102,10);
//打印出来上页/下页/首页/尾页……的url var_dump($page->render()); 

后记


$url = http://www.zhyunfe.com/OOP/Page.class.php?page=1
parse_url($url):将url的文件路径和参数分开并保存到数组中...........................................  array (size=2).	'path' => string '/OOP/Page.class.php' (length=36) . 'query' => string 'page=1' (length=6) .......................................... ... $query = "page=1&num=2&sex=男" parse_str($query,$query):将带参数的字符串解析成数组 .......................................... . array . 'page' => 1 . 'num' => 2 . 'sex' => '男' .......................................... ... $query = ['num'=>1,'sex'=>'男'] http_build_query($query):使用给出的关联(或下标)数组生成一个经过 URL-encode 的请求字符串。 ......................................... . string . "num=1&&sex='男'" ......................................... ... $_SERVER['SERVER_PORT'] 获取端口号 $_SERVER['SERVER_NAME'] 当前运行脚本所在的服务器的主机名。如果脚本运行于虚拟主机中,该名称是由那个虚拟主机所设置的值决定 

转载于:https://www.cnblogs.com/ghjbk/p/6672135.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/284018.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JS 事件练习

QQ拖拽及状态栏选择 HTML 1 <!DOCTYPE html>2 <html xmlns"http://www.w3.org/1999/xhtml">3 <head>4 <title>QQ练习</title>5 <link href"css/main.css" rel"stylesheet" />6 <script src&…

Dubbo和Spring Cloud微服务架构对比

微服务架构是互联网很热门的话题&#xff0c;是互联网技术发展的必然结果。它提倡将单一应用程序划分成一组小的服务&#xff0c;服务之间互相协调、互相配合&#xff0c;为用户提供最终价值。目录 微服务主要的优势 降低复杂度 可独立部署 容错 扩展 核心部件 总体架构 Dubbo …

《ABP Framework 极速开发》 - 教程首发

‍写在发布之前强烈建议每一位小伙伴都应该好好看看 ABP Framework 官方文档&#xff0c;可能有很多的小伙伴跟我刚开始的感觉一样“一看文档深似海”&#xff0c;看完文档之后&#xff0c;想要上手却找不着头绪。本套教程写作的目的之一是为初学者提供一条相对简洁的快速上手路…

智能家居系统结构标准化

版权申明&#xff1a;本文为博主窗户(Colin Cai)原创&#xff0c;欢迎转帖。如要转贴&#xff0c;必须注明原文网址http://www.cnblogs.com/Colin-Cai/p/8490423.html作者&#xff1a;窗户QQ&#xff1a;6679072E-mail&#xff1a;6679072qq.com0 引 言 智能家居是指利用先进的…

洛谷 P3391 文艺平衡树

题目描述 您需要写一种数据结构&#xff08;可参考题目标题&#xff09;&#xff0c;来维护一个有序数列&#xff0c;其中需要提供以下操作&#xff1a;翻转一个区间&#xff0c;例如原有序序列是5 4 3 2 1&#xff0c;翻转区间是[2,4]的话&#xff0c;结果是5 2 3 4 1 --by洛谷…

JSONObject中optString和getString等的区别

2019独角兽企业重金招聘Python工程师标准>>> 同事在看到我写的解析数据代码后&#xff0c;告诉我optString比getString好用&#xff0c;optString不会抛异常&#xff0c;而getString会抛异常&#xff0c;自己是将信将疑&#xff0c;就说&#xff0c;回去后我查查资料…

Lombok插件安装(IDEA)、配置jar包、使用

点击进入Lombok官网下载Lombok jar包 使用Lombok可能需要注意的地方 &#xff08;1&#xff09;当你的IDE是Idea时&#xff0c;要注意你的Idea是支持Lombok的&#xff0c;如果不支持请更换高版本尝试&#xff08;这里采用2018 3.3&#xff09;。 &#xff08;2&#xff09;在使…

Blazor University (40)JavaScript 互操作 —— 传递 HTML 元素引用

原文链接&#xff1a;https://blazor-university.com/javascript-interop/calling-javascript-from-dotnet/passing-html-element-references/传递 HTML 元素引用源代码[1]在编写 Blazor 应用程序时&#xff0c;不鼓励对文档对象模型 (DOM) 进行操作&#xff0c;因为它可能会干…

RabbitMQ+PHP 教程六(RPC)

(using php-amqplib) 前提必读 本教程假设RabbitMQ是安装在标准端口上运行&#xff08;5672&#xff09;。如果您使用不同的主机、端口或凭据&#xff0c;则连接设置需要调整。 如果您在本教程中遇到困难&#xff0c;可以通过邮件列表与我们联系。 开始 在第二个教程中&#xf…

TKMybatis 介绍和使用

目录 一、什么是 TKMybatis 二、TKMybatis 使用 2.1 Springboot 项目中加入依赖 2.2 使用讲解 2.2.1 实体类中使用 2.2.2 dao中使用 2.2.3 Service 层中使用 2.3 实际案例 2.3.1 dao 层使用 2.3.2 service 层使用 一、什么是 TKMybatis TKMybatis 是基于 Mybatis 框…

angularjs的ng-repeat回调

首先html代码是这样的&#xff1a; <label>Name des Leiters:</label><select name"leaderID" id"selectLeaderID"><option ng-repeat"manager in managers" value"leader_id{{manager.id}}&leader_name{{manager…

sed和vim练习

1、删除/etc/grub2.conf文件中所有以空白开头的行行首的空白字符sed s^[[:space:]]\ /etc/grub2.conf2、删除/etc/fstab文件中所有以#开头&#xff0c;后面至少跟一个空白字符的行的行首的#和空白字符sed -n s^#[[:space:]]\p /etc/fstab3、在/root/install.log每一行行首增加#…

WinForm(三)揭开可视化控件的面纱

WinForm所见即所得的UI设计框架&#xff0c;开发效率确实有所提升&#xff0c;同时降低了编程门槛&#xff0c;让WinForm更普及。拖拖拽拽就能设计出一个界面&#xff0c;那么我们拖拽的这些东西是什么&#xff1f;它们是什么原理&#xff1f;。WinForm我觉得很好的一点是&…

浅谈 maxMemory , totalMemory , freeMemory 和 OOM 与 native Heap

作者&#xff1a;林冠宏 / 指尖下的幽灵 掘金&#xff1a;https://juejin.im/user/587f0dfe128fe100570ce2d8 博客&#xff1a;http://www.cnblogs.com/linguanh/ GitHub &#xff1a; https://github.com/af913337456/ 腾讯云专栏&#xff1a; https://cloud.tencent.com/deve…

RestTemplate 详解

在项目中&#xff0c;当我们需要远程调用一个 HTTP 接口时&#xff0c;我们经常会用到 RestTemplate 这个类。这个类是 Spring 框架提供的一个工具类。Spring 官网对它的介绍如下&#xff1a; RestTemplate: The original Spring REST client with a synchronous, template met…

初识Spark2.0之Spark SQL

内存计算平台Spark在今年6月份的时候正式发布了spark2.0&#xff0c;相比上一版本的spark1.6版本&#xff0c;在内存优化&#xff0c;数据组织&#xff0c;流计算等方面都做出了较大的改变&#xff0c;同时更加注重基于DataFrame数据组织的MLlib&#xff0c;更加注重机器学习整…

webpack开发Vue配置

一直以来使用webpack都是用的别人的配置&#xff0c;这几天自己学习了一下。 项目地址&#xff1a;https://github.com/donghaohao... 新建整个工程 npm init安装依赖&#xff0c;这里我们开发vue项目&#xff0c;npm install vue --save&#xff0c;然后是开发时的依赖npm ins…

ABP详细教程——模块类

概述模块化是ABP vNext的最大亮点&#xff0c;也是ABP vNext框架的核心&#xff0c;而模块类是ABP vNext框架模块化的核心要素。这一章节&#xff0c;我就从模块类的用法、运行机制、源代码等层面&#xff0c;带大家详细了解ABP vNext的模块类。用法在ABP的约定中&#xff0c;每…

[转]Eureka工作原理

目录 Eureka 工作原理 Eureka 核心概念 自我保护机制 Eureka 集群原理 Eurka 工作流程 总结 Eureka 工作原理 上节内容为大家介绍了&#xff0c;注册中心 Eureka 产品的使用&#xff0c;以及如何利用 Eureka 搭建单台和集群的注册中心。这节课我们来继续学习 Eureka&…

centos7下别名(alias)的特殊用法

版权声明&#xff1a;转载请注明出处:http://blog.csdn.net/dajitui2024 https://blog.csdn.net/dajitui2024/article/details/79438200 参考&#xff1a;https://www.cyberciti.biz/faq/bash-bypass-alias-command-on-linux-macos-unix/ 正常情况下&#xff0c;定义过的别名&a…