PHP学习之分页类
<?php $page = new Page(2, 40); var_dump($page->allUrl()); class Page { //每页显示多少条数据 protected $number; //一共有多少条数据 protected $totalCount; //当前页 protected $page; //总页数 protected $totalPage; //url protected $url; public function __construct($number, $totalCount) { $this->number = $number; $this->totalCount = $totalCount; //得到总页数 $this->totalPage = $this->getTotalPage(); //得到当前页数 $this->page = $this->getPage(); //得到url $this->url = $this->getUrl(); } /** * 获取总页数 * * @return void */ protected function getTotalPage() { return ceil($this->totalCount / $this->number); } /** * 获取当前页码 * * @return void */ protected function getPage() { if (empty($_GET['page'])) { $page = 1; } elseif ($_GET['page'] > $this->totalPage) { $page = $this->totalPage; } elseif ($_GET['page'] < 1) { $page = 1; } else { $page = $_GET['page']; } return $page; } /** * 获取去掉page之后的url * * @return void */ protected function getUrl() { //得到协议名 $scheme = $_SERVER['REQUEST_SCHEME']; //得到主机名 $host = $_SERVER['SERVER_NAME']; //得到端口号 $port = $_SERVER['SERVER_PORT']; //得到路径和请求字符串 $uri = $_SERVER['REQUEST_URI']; //中间做处理,要将page=5等这种字符串拼接url中,所以如果原来url中有page这个参数,我们首先需要先将原来的page参数给清空 $uriArray = parse_url($uri); $path = $uriArray['path']; if (!empty($uriArray['query'])) { //首先将请求字符串变为关联数组 parse_str($uriArray['query'], $array); //清除掉关联数组中的page键值对 unset($array['page']); //将剩下的参数拼接为请求字符串 $query = http_build_query($array); //再将请求字符串拼接到路径的后面 if ($query != '') { $path = $path . '?' . $query; } } return $scheme . '://' . $host . ':' . $port . $path; } /** * 设置url * * @param [type] $str * @return void */ protected function setUrl($str) { if (strstr($this->url, '?')) { $url = $this->url . '&' . $str; } else { $url = $this->url . '?' . $str; } return $url; } /** * 返回所有url * * @return void */ public function allUrl() { return [ 'first' => $this->first(), 'prev' => $this->prev(), 'next' => $this->next(), 'end' => $this->end() ]; } /** * 首页 * * @return void */ public function first() { return $this->setUrl('page=1'); } /** * 下一页 * * @return void */ public function next() { //根据当前page得到下一页的页码 if ($this->page + 1 > $this->totalPage) { $page = $this->totalPage; } else { $page = $this->page + 1; } return $this->setUrl('page=' . $page); } /** * 上一页 * * @return void */ public function prev() { if ($this->page - 1 < 1) { $page = 1; } else { $page = $this->page - 1; } return $this->setUrl('page=' . $page); } /** * 尾页 * * @return void */ public function end() { return $this->setUrl('page=' . $this->totalPage); } /** * 偏移量,方便数据库查找 * * @return void */ public function limit() { $offset = ($this->page - 1) * $this->number; return $offset . ',' . $this->number; } }
运行结果: