资讯专栏INFORMATION COLUMN

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

qqlcbb / 1747人阅读

摘要:男获取端口号当前运行脚本所在的服务器的主机名。如果脚本运行于虚拟主机中,该名称是由那个虚拟主机所设置的值决定本文由甲爪广告联盟整理编辑

同验证码类,分页也是在个人博客,论坛等网站中不可缺少的方式,通过分页可以在一个界面展示固定条数的数据,而不至于将所有数据全部罗列到一起,实现分页的原理其实就是对数据库查询输出加了一个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.jiazhua.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"] 当前运行脚本所在的服务器的主机名。如果脚本运行于虚拟主机中,该名称是由那个虚拟主机所设置的值决定
本文由甲爪cpa广告联盟整理编辑!

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/22358.html

相关文章

  • thinkphp分页bug--解决thinkphp分页乱码问题

    摘要:本文就这一问题给出解决方案。具体修改的代码是在分页类文件的最后加上一个自定义函数,用于替换中的参数分隔符号,函数内容如下自学博客修改最终生成的在文件的第行,将原来的修改为生成标准的经过这两步修改就可以解决分页乱码的问题了。 thinkphp自带的分页类存在bug,例如当我们搜索关键词时,关键词为中文,第二次点击分页的时候,就会乱码,不能正常的显示我们需要的页码。本文就这一问题给出解决方...

    Jrain 评论0 收藏0
  • 一步步实现thinkphp上的ajax无刷新分页

    摘要:信息列表循环赋值分页信息部分这一步是实现无刷新分页的重点,用到了的通信,通过与数据库的交互,将获取到的数据写到模板中,替换掉之前的数据集,达到分页的目的。 前言 thinkphp框架自带的分页类是每次翻页都要刷新一下整个页面,这种翻页的用户体验显然是不太理想的,我们希望每次翻页只刷新我们想要的数据集部分的数据,这样我们很容易想到ajax异步通信,用ajax与数据库(本人在开发过程中使用...

    张迁 评论0 收藏0
  • 小型版php框架

    摘要:项目源码地址链接地址简单版框架特点单入口采用面向对象思想,基于设计思想,使用观察者,注册器,工厂,代理,特性等模式开发。提供一些常用类图片分页文件上传验证码等。提供常用的插件文件压缩合并观察等。基于通过数组下标访问配置文件。 项目源码地址 链接地址(https://github.com/cxp1539/mi... Framework 简单版php框架 Framework特点 单入口i...

    1treeS 评论0 收藏0
  • PHP_ThinkPHP

    摘要:相关信息,面向过程,面向对象,轻量级。轻量级功能实用,面向过程和面向对象混合开发。找到文件为文件名为验证码类没有在自动加载类中载入,需要手动载入。底层的和会影响原始的框架中的引入,可以使用框架中提供的引入。 不使用框架的问题 在实际工作中,如果不使用框架会遇到的问题。 程序项目生命时间非常短(维护性,生命力弱) 分共协作开发项目,彼此代码风格不一致。 开发程序,喜欢挖坑。 开发者离职...

    wind3110991 评论0 收藏0
  • Laravel学习笔记之PHP对象遍历(Iterator)

    摘要:中在基础集合类路由类中和分页类中等,都用到了对象遍历这个小知识点,这些类都是实现了这个接口,这个接口定义,返回的是迭代器对象。标准扩展库中提供了很多默认迭代器实现类,比较常用的是数组迭代器对象,参考官网迭代器。 说明:本文章主要讲述PHP的对象遍历(Iterator)知识点。由于Laravel框架中就在集合(Collection)中用到了对象遍历知识点,故记录并学习之。同时,作者会将开...

    余学文 评论0 收藏0

发表评论

0条评论

qqlcbb

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<