以前寫過一個MVC框架,封裝的有點low,經過一段時間的沉澱,打算重新改造下,之前這篇文章封裝過一個驗證碼類。 這次重新改造MVC有幾個很大的收穫 >全部代碼都是用Ubuntu+Vim編寫,以前都是windows上開發,這次徹底迷上Ubuntu Linux >裸裝php,用php自帶的伺服器解釋執行 ...
以前寫過一個MVC框架,封裝的有點low,經過一段時間的沉澱,打算重新改造下,之前這篇文章封裝過一個驗證碼類。
這次重新改造MVC有幾個很大的收穫
>全部代碼都是用Ubuntu+Vim編寫,以前都是windows上開發,這次徹底迷上Ubuntu Linux
>裸裝php,用php自帶的伺服器解釋執行php,缺哪個擴展就裝哪個,最後通過整個MVC框架的開發,把Lamp所有的常用配置與細節搞懂
>通過擴展安裝,學習擴展開發與php底層源碼分析
總之,終於感覺層次又提升了不少。
分頁類代碼:
1 <?php 2 3 class Page { 4 //每頁顯示的條目 5 protected $pageSize; 6 //總記錄數 7 protected $totalRecord; 8 //當前頁 9 protected $p; 10 //總頁數 11 protected $totalPage; 12 protected $url; 13 14 public function __construct( $_pageSize, $_totalRecord ){ 15 $this->pageSize = $_pageSize; 16 $this->totalRecord = $_totalRecord; 17 $this->totalPage = ceil( $this->totalRecord / $this->pageSize ); 18 $this->p = $this->getCurPage(); 19 $this->url = $this->getUrl(); 20 } 21 22 public function setUrl( $p ){ 23 if( strstr( $this->url, '?' ) ) { 24 //url中有參數 25 $url = $this->url . '&p=' . $p; 26 }else { 27 //url中沒有參數 28 $url = $this->url . '?p=' . $p; 29 } 30 return $url; 31 } 32 33 //首頁 34 public function firstPage(){ 35 return $this->setUrl( 1 ); 36 } 37 38 //末頁 39 public function lastPage(){ 40 return $this->setUrl( $this->totalPage ); 41 } 42 43 //上一頁 44 public function prevPage(){ 45 if( $this->p - 1 <= 0 ) { 46 $prevPage = $this->p; 47 }else { 48 $prevPage = $this->p - 1; 49 } 50 return $this->setUrl( $prevPage ); 51 } 52 53 //下一頁 54 public function nextPage(){ 55 if( $this->p + 1 > $this->totalPage ) { 56 $nextPage = $this->p; 57 }else { 58 $nextPage = $this->p + 1; 59 } 60 return $this->setUrl( $nextPage ); 61 } 62 63 //得到當前的頁碼 64 public function getCurPage(){ 65 $curPage = intval( $_GET['p'] ); 66 if ( empty( $curPage ) ) { 67 $curPage = 1; 68 }else if ( $curPage > $this->totalPage ) { 69 $curPage = $this->totalPage; 70 }else if ( $curPage < 0 ){ 71 $curPage = 1; 72 } 73 return $curPage; 74 } 75 76 //拼接url 77 public function getUrl(){ 78 $protocol = strtolower( array_shift( explode( '/', $_SERVER['SERVER_PROTOCOL'] ) ) ); 79 $host = $_SERVER['SERVER_NAME']; 80 $port = $_SERVER['SERVER_PORT']; 81 $uri = $_SERVER['REQUEST_URI']; 82 $uriArr = parse_url( $uri ); 83 $path = $uriArr['path']; 84 if( !empty( $uriArr['query'] ) ) { 85 //url中的query字元轉數組 86 parse_str( $uriArr['query'], $args ); 87 //清除原來的分頁參數p 88 if( isset( $args['p'] ) ){ 89 unset( $args['p'] ); 90 } 91 //參數重新拼接成字元串 92 $queryString = http_build_query( $args ); 93 //字元串如果不止一個p參數,把那些參數拼接在path的後面 94 if ( !empty( $queryString ) ){ 95 $path .= '?' . $queryString; 96 } 97 } 98 return $protocol . '://' . $host . ':' . $port . $path; 99 } 100 101 public function render(){ 102 return [ 103 'first' => $this->firstPage(), 104 'last' => $this->lastPage(), 105 'prev' => $this->prevPage(), 106 'next' => $this->nextPage() 107 ]; 108 } 109 110 public function limit(){ 111 $offset = ( $this->p - 1 ) * $this->pageSize; 112 return $offset . ',' . $this->pageSize; 113 } 114 } 115 116 $page = new Page( 5, 11 ); 117 //echo $page->getCurPage(); 118 //echo $page->getUrl(); 119 print_r( $page->render() ); 120 121 ?>