PHP面向对象(OOP)----分页类
生活随笔
收集整理的這篇文章主要介紹了
PHP面向对象(OOP)----分页类
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
PHP面向?qū)ο?OOP)----分頁(yè)類
同驗(yàn)證碼類,分頁(yè)也是在個(gè)人博客,論壇等網(wǎng)站中不可缺少的方式,通過(guò)分頁(yè)可以在一個(gè)界面展示固定條數(shù)的數(shù)據(jù),而不至于將所有數(shù)據(jù)全部羅列到一起,實(shí)現(xiàn)分頁(yè)的原理其實(shí)就是對(duì)數(shù)據(jù)庫(kù)查詢輸出加了一個(gè)limit限制,接下來(lái)我們就開(kāi)始準(zhǔn)備今天分頁(yè)類的邏輯
邏輯準(zhǔn)備
實(shí)現(xiàn)分頁(yè),我們需要獲取準(zhǔn)備以下屬性和方法
屬性{數(shù)據(jù)總條數(shù)每一頁(yè)顯示的條數(shù)計(jì)算出總頁(yè)數(shù)獲取當(dāng)前是第幾頁(yè)顯示上一頁(yè)顯示下一頁(yè)顯示首頁(yè)顯示尾頁(yè)每一頁(yè)的url數(shù)據(jù)限制limit } 方法{構(gòu)造函數(shù)計(jì)算總頁(yè)數(shù)獲取當(dāng)前頁(yè)獲取上一頁(yè)獲取下一頁(yè)獲取首頁(yè)獲取尾頁(yè)獲取當(dāng)前頁(yè)面url獲取上一頁(yè)url獲取下一頁(yè)url獲取首頁(yè)url獲取尾頁(yè)irl生成limit記錄重新生成url地址顯示分頁(yè)鏈接,顯示分頁(yè)情況 }根據(jù)上面的邏輯,下一步將文字轉(zhuǎn)換為代碼
首先,我們先聲明一個(gè)Page類,按照邏輯進(jìn)行屬性聲明,并且進(jìn)行初始化
class Page {//記錄總條數(shù)protected $total; //每頁(yè)顯示幾條 protected $nums; //總頁(yè)數(shù) protected $totalPages; //當(dāng)前頁(yè)碼 protected $currentPage; //上一頁(yè)頁(yè)碼 protected $prevPage; //下一頁(yè)頁(yè)碼 protected $nextPage; //首頁(yè)頁(yè)碼 protected $firstPage; //尾頁(yè)頁(yè)碼 protected $endPage; //url protected $url; //limit,傳到數(shù)據(jù)庫(kù)的limit protected $limit; //構(gòu)造函數(shù),初始化 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(); } }接下來(lái)我們開(kāi)始完善方法
- 計(jì)算總頁(yè)數(shù)
- 獲取當(dāng)前頁(yè)碼
- 獲取上一頁(yè)
- 獲取下一頁(yè)
- 獲取首頁(yè)
- 獲取尾頁(yè)
接下來(lái)開(kāi)始拼接每個(gè)頁(yè)碼的url
- 獲取當(dāng)前頁(yè)的url
- 獲取前一頁(yè)的url
- 獲取下一頁(yè)的url
- 獲取首頁(yè)的url
- 獲取尾頁(yè)的url
生成limit記錄
public function limit() { return ($this->currentPage - 1) * $this->nums.','.$this->nums; }生成url地址
public function getUrl() { //獲取當(dāng)前頁(yè)面的文件位置 $url = $_SERVER['REQUEST_URI']; //將url參數(shù)解析成數(shù)組 $parse = parse_url($url); //獲得域名地址 $path = $parse['path']; //獲取參數(shù) $query = isset($parse['query']) ? $parse['query'] : false; //如果有參數(shù),把page這個(gè)參數(shù)先給干掉,因?yàn)槲覀円匦缕唇?if($query) { parse_str($query,$query); //干掉page參數(shù),保留其他參數(shù) unset($query['page']); //http_build_query拼將參數(shù)拼接成請(qǐng)求 $uri = $parse['path'].'?'.http_build_query($query); } else { $uri = rtrim($parse['path'],'?').'?'; } //智能識(shí)別https和http協(xié)議和端口號(hào) $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; }到此所有的邏輯方面都已經(jīng)處理完啦,接下來(lái)的render()函數(shù)用來(lái)顯示分頁(yè)的鏈接
public function render() { return array( ['first' => $this->getFirstUrl()], ['prev' => $this->getPrevUrl()], ['current' => $this->getCurrentUrl()], ['next' => $this->getNextUrl()], ['end' => $this->getEndUrl()] ); }哦也,就這么愉快的結(jié)束啦
使用方法如下
//new一個(gè)對(duì)象 $page = new Page(102,10); //打印出來(lái)上頁(yè)/下頁(yè)/首頁(yè)/尾頁(yè)……的url var_dump($page->render());后記
$url = http://www.zhyunfe.com/OOP/Page.class.php?page=1 parse_url($url):將url的文件路徑和參數(shù)分開(kāi)并保存到數(shù)組中........................................... 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):將帶參數(shù)的字符串解析成數(shù)組 .......................................... . array . 'page' => 1 . 'num' => 2 . 'sex' => '男' .......................................... ... $query = ['num'=>1,'sex'=>'男'] http_build_query($query):使用給出的關(guān)聯(lián)(或下標(biāo))數(shù)組生成一個(gè)經(jīng)過(guò) URL-encode 的請(qǐng)求字符串。 ......................................... . string . "num=1&&sex='男'" ......................................... ... $_SERVER['SERVER_PORT'] 獲取端口號(hào) $_SERVER['SERVER_NAME'] 當(dāng)前運(yùn)行腳本所在的服務(wù)器的主機(jī)名。如果腳本運(yùn)行于虛擬主機(jī)中,該名稱是由那個(gè)虛擬主機(jī)所設(shè)置的值決定
轉(zhuǎn)載于:https://www.cnblogs.com/ghjbk/p/6672135.html
總結(jié)
以上是生活随笔為你收集整理的PHP面向对象(OOP)----分页类的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 协作安装程序应用一例
- 下一篇: 用PHP去掉文件头的Unicode签名(