zoukankan      html  css  js  c++  java
  • 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;
        }
    }

    运行结果:

  • 相关阅读:
    【转】【Egit】如何将eclipse中的项目上传至Git
    IntelliJ IDEA License Server本地搭建教程
    fastdfs-client-java工具类封装
    maven阿里云中央仓库
    Maven入门指南 :Maven 快速入门及简单使用
    如何在MyEclipse中配置jre的编译运行环境
    聚合函数 多次出现的某字段相同的记录。
    sql 过了试用期不能启动的,修改时间启动后还原。
    查看触发器内容
    Sql语句,先查询再插入一条语句完成。
  • 原文地址:https://www.cnblogs.com/shengChristine/p/10941657.html
Copyright © 2011-2022 走看看