分页类

从需求来写类

先要写出需求  了解需要哪些方法 需要哪些参数 然后在进行编写

分页 需要输入总页数 每页有多少个数据 每次显示多少个页码

类中通过计算  算出地址 

地址计算 先判读是否有参数 参数中有?  所以判读是否有问号即可  strpos($_SERVER["REQUEST_URI"], '?')

parse_url($url)  返回一个关联数字 分析url

Array
(
[scheme] => http
[host] => hostname
[user] => username
[pass] => password
[path] => /path
[query] => arg=value
[fragment] => anchor
)
 

parse_str() 函数把查询字符串解析到变量中。

parse_str("id=23&name=John%20Adams",$myArray);
print_r($myArray);

Array
(
[id] => 23
[name] => John Adams
)
魔术方法
一般来说,总是把类的属性定义为private,这更符合现实的逻辑。但是,对属性的读取和赋值操作是非常频繁的,因此在PHP5中,预定义了两个函数“__get()”和“__set()”来获取和赋值其属性,以及检查属性的“__isset()”和删除属性的方法“__unset()”。
上一节中,我们为每个属性做了设置和获取的方法,在 PHP5 中给我们提供了专门为属性设置值和获取值的方法,“ __set() ”和“ __get() ”这两个方法,这两个方法不是默认存在的, 而是我们手工添加到类里面去的,像构造方法 (__construct()) 一样 , 类里面添加了才会存在,可以按下面的方式来添加这两个方法,当然也可以按个人的风格来添加:
//__get() 方法用来获取私有属性
private function __get( $ property_name )
{
 
if ( isset ( $ this -> $ property_name ))
{
return ( $ this -> $ property_name );
} else
{
return ( NULL );
}
}
//__set() 方法用来设置私有属性
private function __set( $ property_name , $ value )
{
$ this -> $ property_name = $ value ;
}
__get() 方法:这个方法用来获取私有成员属性值的 , 有一个参数, 参数传入你要获取的成员属性的名称,返回获取的属性值, 这个方法不用我们手工的去调用,因为我们也可以把这个方法做成私有的方法, 是在直接获取私有属性的时候对象自动调用的。因为私有属性已经被封装上了,是不能直接获取值的(比如:“ echo $p1->name 这样直接获取是错误的),但是如果你在类里面加上了这个方法,在使用“ echo $p1->name 这样的语句直接获取值的时候就会自动调用 __get($property_name) 方法,将属性 name 传给参数 $property_name ,通过这个方法的内部执行,返回我们传入的私有属性的值。如果成员属性不封装成私有的,对象本身就不会去自动调用这个方法。
__set() 方法:这个方法用来为私有成员属性设置值的,有两个参数,第一个参数为你要为设置值的属性名,第二个参数是要给属性设置的值,没有返回值。这个方法同样不用我们手工去调用,它也可以做成私有的,是在直接设置私有属性值的时候自动调用的,同样属性私有的已经被封装上 了, 如果没有 __set() 这个方法,是不允许的, 比如: $this->name= zhangsan , 这样会出错,但是如果你在类里面加上了 __set($property_name, $value) 这个方法,在直接给私有属性赋值的时候,就会自动调用它,把属性比如 name 传给 $property_name, 把要赋的值“ zhangsan ”传给 $value ,通过这个方法的执行,达到赋值的目的。如果成员属性不封装成私有的,对象本身就不会去自动调用这个方法。为了不传入非法的值, 还可以在这个方法给做一下判断。
 
然后通过需求在编写类中的方法
首页 上一页 下一页 尾页  等这些标志可以放到数组中  用户可以进行修改
页码数 让选中的页码放到中间 然后获取前后的页数
添加一个参数,让用户可以自行添加参数
 
复制代码
  1 <?php
  2     class Page {
  3         private $total; //数据表中总记录数
  4         private $listRows; //每页显示行数
  5         private $limit;
  6         private $uri;
  7         private $pageNum; //页数
  8         private $config=array('header'=>"个记录", "prev"=>"上一页", "next"=>"下一页", "first"=>"首 页", "last"=>"尾 页");
  9         private $listNum=8;
 10         /*
 11          * $total 
 12          * $listRows
 13          */
 14         public function __construct($total, $listRows=10, $pa=""){
 15             $this->total=$total;
 16             $this->listRows=$listRows;
 17             $this->uri=$this->getUri($pa);
 18             $this->page=!empty($_GET["page"]) ? $_GET["page"] : 1;
 19             $this->pageNum=ceil($this->total/$this->listRows);
 20             $this->limit=$this->setLimit();
 21         }
 22 
 23         private function setLimit(){
 24             return "Limit ".($this->page-1)*$this->listRows.", {$this->listRows}";
 25         }
 26 
 27         private function getUri($pa){
 28             $url=$_SERVER["REQUEST_URI"].(strpos($_SERVER["REQUEST_URI"], '?')?'':"?").$pa;
 29             echo $url;
 30             $parse=parse_url($url);
 31 
 32         
 33 
 34             if(isset($parse["query"])){
 35                 parse_str($parse['query'],$params);
 36                 unset($params["page"]);
 37                 $url=$parse['path'].'?'.http_build_query($params);
 38                 
 39             }
 40 
 41             return $url;
 42         }
 43 
 44         private function __get($args){
 45             if($args=="limit")
 46                 return $this->limit;
 47             else
 48                 return null;
 49         }
 50 
 51         private function start(){
 52             if($this->total==0)
 53                 return 0;
 54             else
 55                 return ($this->page-1)*$this->listRows+1;
 56         }
 57 
 58         private function end(){
 59             return min($this->page*$this->listRows,$this->total);
 60         }
 61 
 62         private function first(){
 63             if($this->page==1)
 64                 $html.='';
 65             else
 66                 $html.="&nbsp;&nbsp;<a href='{$this->uri}&page=1'>{$this->config["first"]}</a>&nbsp;&nbsp;";
 67 
 68             return $html;
 69         }
 70 
 71         private function prev(){
 72             if($this->page==1)
 73                 $html.='';
 74             else
 75                 $html.="&nbsp;&nbsp;<a href='{$this->uri}&page=".($this->page-1)."'>{$this->config["prev"]}</a>&nbsp;&nbsp;";
 76 
 77             return $html;
 78         }
 79 
 80         private function pageList(){
 81             $linkPage="";
 82             
 83             $inum=floor($this->listNum/2);
 84         
 85             for($i=$inum; $i>=1; $i--){
 86                 $page=$this->page-$i;
 87 
 88                 if($page<1)
 89                     continue;
 90 
 91                 $linkPage.="&nbsp;<a href='{$this->uri}&page={$page}'>{$page}</a>&nbsp;";
 92 
 93             }
 94         
 95             $linkPage.="&nbsp;{$this->page}&nbsp;";
 96             
 97 
 98             for($i=1; $i<=$inum; $i++){
 99                 $page=$this->page+$i;
100                 if($page<=$this->pageNum)
101                     $linkPage.="&nbsp;<a href='{$this->uri}&page={$page}'>{$page}</a>&nbsp;";
102                 else
103                     break;
104             }
105 
106             return $linkPage;
107         }
108 
109         private function next(){
110             if($this->page==$this->pageNum)
111                 $html.='';
112             else
113                 $html.="&nbsp;&nbsp;<a href='{$this->uri}&page=".($this->page+1)."'>{$this->config["next"]}</a>&nbsp;&nbsp;";
114 
115             return $html;
116         }
117 
118         private function last(){
119             if($this->page==$this->pageNum)
120                 $html.='';
121             else
122                 $html.="&nbsp;&nbsp;<a href='{$this->uri}&page=".($this->pageNum)."'>{$this->config["last"]}</a>&nbsp;&nbsp;";
123 
124             return $html;
125         }
126 
127         private function goPage(){
128             return '&nbsp;&nbsp;<input type="text" οnkeydοwn="javascript:if(event.keyCode==13){var page=(this.value>'.$this->pageNum.')?'.$this->pageNum.':this.value;location=\''.$this->uri.'&page=\'+page+\'\'}" value="'.$this->page.'" style="width:25px"><input type="button" value="GO" οnclick="javascript:var page=(this.previousSibling.value>'.$this->pageNum.')?'.$this->pageNum.':this.previousSibling.value;location=\''.$this->uri.'&page=\'+page+\'\'">&nbsp;&nbsp;';
129         }
130         function fpage($display=array(0,1,2,3,4,5,6,7,8)){
131             $html[0]="&nbsp;&nbsp;共有<b>{$this->total}</b>{$this->config["header"]}&nbsp;&nbsp;";
132             $html[1]="&nbsp;&nbsp;每页显示<b>".($this->end()-$this->start()+1)."</b>条,本页<b>{$this->start()}-{$this->end()}</b>条&nbsp;&nbsp;";
133             $html[2]="&nbsp;&nbsp;<b>{$this->page}/{$this->pageNum}</b>页&nbsp;&nbsp;";
134             
135             $html[3]=$this->first();
136             $html[4]=$this->prev();
137             $html[5]=$this->pageList();
138             $html[6]=$this->next();
139             $html[7]=$this->last();
140             $html[8]=$this->goPage();
141             $fpage='';
142             foreach($display as $index){
143                 $fpage.=$html[$index];
144             }
145 
146             return $fpage;
147 
148         }
149 
150     
151     }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值