PHP面向对象(OOP)----分页类
> 同验证码类,分页也是在个人博客,论坛等网站中不可缺少的方式,通过分页可以在一个界面展示固定条数的数据,而不至于将所有数据全部罗列到一起,实现分页的原理其实就是对数据库查询输出加了一个limit限制,接下来我们就开始准备今天分页类的逻辑
#### 逻辑准备
> 实现分页,我们需要获取准备以下属性和方法
```PHP
属性{
数据总条数
每一页显示的条数
计算出总页数
获取当前是第几页
显示上一页
显示下一页
显示首页
显示尾页
每一页的url
数据限制limit
}
方法{
构造函数
计算总页数
获取当前页
获取上一页
获取下一页
获取首页
获取尾页
获取当前页面url
获取上一页url
获取下一页url
获取首页url
获取尾页irl
生成limit记录
重新生成url地址
显示分页链接,显示分页情况
}
```
#### 根据上面的逻辑,下一步将文字转换为代码
首先,我们先声明一个Page类,按照逻辑进行属性声明,并且进行初始化
```php
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();
}
}
```
**接下来我们开始完善方法**
- 计算总页数
```php
protected funciton getTotalPages()
{
return ceil($this->total / $this->$nums);
}
```
- 获取当前页码
```php
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;
}
```
- 获取上一页
```php
protected function getPrevPage()
{
$this->prevPage = $this->currentPage - 1;
if($this->prevPage prevPage = 1;
}
return $this->prevPage;
}
```
- 获取下一页
```php
protected function getNextPage()
{
$this->nextPage = $this->currentPage + 1;
return $this->nextPage;
}
```
- 获取首页
```php
protected function getFirstPage()
{
$this->firstPage = 1;
return $this->firstPage;
}
```
- 获取尾页
```PHP
protected function getEndPage()
{
$this->endPage = $this->totalPages;
return $this->endPage;
}
```
#### 接下来开始拼接每个页码的url
- 获取当前页的url
```php
protected function getCurrentUrl()
{
return $this->url.'$page='.$this->currentPage;
}
```
- 获取前一页的url
```php
protected function getPrevUrl()
{
return $this->url.'&page='.$this->prevPage;
}
```
- 获取下一页的url
```php
protected function getNextUrl()
{
return $this->url.'&page='.$this->nextPage;
}
```
- 获取首页的url
```php
protected function getFirstUrl()
{
return $this->url.'&page='.$this->firstPage;
}
```
- 获取尾页的url
```php
protected function getEndUrl()
{
return $this->url.'&page='.$this->endPage;
}
```
#### 生成limit记录
```PHP
public function limit()
{
return ($this->currentPage - 1) * $this->nums.','.$this->nums;
}
```
#### 生成url地址
```php
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()函数用来显示分页的链接
```PHP
public function render()
{
return array(
['first' => $this->getFirstUrl()],
['prev' => $this->getPrevUrl()],
['current' => $this->getCurrentUrl()],
['next' => $this->getNextUrl()],
['end' => $this->getEndUrl()]
);
}
```
### 哦也,就这么愉快的结束啦
使用方法如下
```PHP
//new一个对象
$page = new Page(102,10);
//打印出来上页/下页/首页/尾页……的url
var_dump($page->render());
```
#### 后记
---
```php
$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'] 当前运行脚本所在的服务器的主机名。如果脚本运行于虚拟主机中,该名称是由那个虚拟主机所设置的值决定
```
PHP面向对象(OOP)----分页类的更多相关文章
- 面向对象oop 和类
面向对象与面向过程的区别 面向对象:面向对象的思维模式说白了就是分类思维模式.思考问题首先会解决问题需要哪些分类,然后对这些分类进行单独思考.最后,才对某个分类下的细节进行面向过程的思索 自我理解(领 ...
- PHP面向对象(OOP)编程入门教程
面向对象编程(OOP)是我们编程的一项基本技能,PHP5对OOP提供了良好的支持.如何使用OOP的思想来进行PHP的高级编程,对于提高 PHP编程能力和规划好Web开发构架都是非常有意义的.下面我们就 ...
- 【PHP面向对象(OOP)编程入门教程】1.什么是面向对象?
面向对象编程(Object Oriented Programming, OOP, 面向对象程序设计)是一种计算机编程架构,OOP的一条基本原则是计算机程序是由单个能够起到子程序作用的单元或对象组合而成 ...
- php面向对象(OOP)编程完全教程
摘自:http://www.php-note.com/article/detail/41 面向对象编程(OOP)是我们编程的一项基本技能,PHP5对OOP提供了良好的支持.如何使用OOP的思想来进行P ...
- php+mysql分页类的入门实例
php+mysql分页类的简单代码 时间:2016-02-25 06:16:26来源:网络 导读:php+mysql分页类的简单代码,二个php分页类代码,对商品进行分页展示,当前页面数,每个页面展示 ...
- python中的面向对象学习以及类的封装(这篇文章初学者一定要好好看)
这篇文章对于初学者可以很有效的理解面对过程.面对对象 一.首先介绍一下面向过程和面向对象的比较: 面向过程 VS 面向对象 编程范式 编程是程序员用特定的语法+数据结构+算法组成的代码来告诉计算机如何 ...
- [Python_4] Python 面向对象(OOP)
0. 说明 Python 面向对象(OOP) 笔记.迭代磁盘文件.析构函数.内置方法.多重继承.异常处理 参考 Python面向对象 1. 面向对象 # -*-coding:utf-8-*- &quo ...
- Python面向对象编程、类
一.面向对象编程 面向对象--Object Oriented Programming,简称oop,是一种程序设计思想.在说面向对象之前,先说一下什么是编程范式,编程范式你按照什么方式来去编程,去实现一 ...
- python学习笔记(七):面向对象编程、类
一.面向对象编程 面向对象--Object Oriented Programming,简称oop,是一种程序设计思想.在说面向对象之前,先说一下什么是编程范式,编程范式你按照什么方式来去编程,去实现一 ...
随机推荐
- svn + jenkins + maven 实现java环境的自动化构建和部署
1. 环境说明: 系统CentOS 7 x64 IP: 10.6.0.126 1.1 首先安装配置 svn Centos 7 通过yum 安装svn 既可, 版本为1.7.14 # yum -y ...
- CentOS 6.5 GIT 服务器搭建
环境: Git Sserver IP: 10.6.0.2 Git Client IP: 10.6.0.126 1. 在 Git Server 安装软件所需的依赖包 yum install curl-d ...
- [iOS Animation]-CALayer 图层树
图层的树状结构 巨妖有图层,洋葱也有图层,你有吗?我们都有图层 -- 史莱克 Core Animation其实是一个令人误解的命名.你可能认为它只是用来做动画的,但实际上它是从一个叫做Layer Ki ...
- MyEclipse构建Web Service(Xfire框架)
以下是本人原创,如若转载和使用请注明转载地址.本博客信息切勿用于商业,可以个人使用,若喜欢我的博客,请关注我,谢谢!博客地址 任务要求: 使用Xfire实现一个简单的CalculatorWebServ ...
- iOS 代码实现获得应用的版本号(Version/Build)
http://www.open-open.com/lib/view/open1411817778203.html
- Dom编程(二)
document是window对象的一个属性,因为使用window对象成员的时候可以省略window.,所以一般直接写document document的方法: (1)write:向文档中写入内容. ...
- selenium Chromediver
Here we use wget to fetch the version number of the latest release, then plug the version into anoth ...
- DP——由蒟蒻到神犇的进阶之路
开始更新咯 DP专题[题目来源BZOJ] 一.树形DP 1.bzoj2286消耗战 题解:因为是树形结构,一个点与根节点不联通,删一条边即可, 于是我们就可以简化这棵树,把有用的信息建立一颗虚树,然后 ...
- centos 单独安装nginx
安装包下载网址: http://nginx.org/en/download.html 进入Linux文件夹执行 wget http://nginx.org/download/nginx-1.8.0.t ...
- 淘宝的数据库拆分(TDDL)(转)
淘宝的数据拆分历程 系 统刚开始的时候,因为系统刚上线,用户不多,那个时候,所有的数据都放在了同一个数据库中,这个时候因为用户少压力小,一个数据库完全可以应付的了,但是 随着运营那些哥们辛苦的呐喊和拼 ...