亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > PHP > 正文

PHP仿tp實現mvc框架基本設計思路與實現方法分析

2020-03-22 19:25:40
字體:
來源:轉載
供稿:網友
這篇文章主要介紹了PHP仿tp實現mvc框架基本設計思路與實現方法,簡單講述了php實現tp框架的原理,并結合實例形式分析了相關控制器、視圖及URL訪問操作技巧與注意事項,需要的朋友可以參考下

本文實例講述了PHP仿tp實現mvc框架基本設計思路與實現方法。分享給大家供大家參考,具體如下:

仿tp mvc基本設計與簡單實現

一:文件加載常識

變量 常量 函數
文件加載的函數或者使用命名空間:require(); require_once(); include(); include_once();
常量:define( DEFINE , const constant = html' target='_blank'>value
函數:function fun(){} // global 使用全局變量 局部變量不被外部調用。
類:

 ?phpclass A{ public $a = 10; public function aa(){ // 不能使用一個a是因為,new A 之后 方法a會被自動執行,所以方法名不可以和類名沖突。 echo $this- // 輸出屬性. public function __construct(){ // 構造方法,實例化后自動執行, echo $this- bb(); // 調用方法。 public function bb(){ echo 我是bb $a = new A;$a- aa();class B extends A{ // 繼承 A ,類A是類B的父級。繼承public的,$b = new B;$b- aa(); // 可以輸出類A里面的屬性。

工廠模式參閱://www.jb51.net/article/140658.htm

//-----------------------------工廠模式-------------------------//class A{ public $class; // public $class = $_GET[ c //類名 public $method; // public $method = $_GET[ m //方法 public function __construct($class,$method){ // 或者通過 $_SERVER[ PATH_INFO 轉換得到類名或者方法名(下面講解)。 $this- class = ucfirst(strtolower($class)). Controller //對類名進行安全處理,并加上控制器后綴 $this- method = strtolower($method); //對方法名進行安全處理 $this- work($this- class,$this- method); public function work($class,$method){ // 把文件命名成 (類名.class.php的形式),就可以通過類名找到文件。 //include 文件名(文件在別的地方) #例如 include ./index.php 引入文件然后實例化類。 $c = new $class; //實例化類 $c- $method(); //訪問類的方法}

至此我們可以通過url的 $_GET 參數來解決

例如:http://mvc.com/index.php?h=home v=Index c=index.html

h為前后臺,v為控制器,c為模板。

$v = $_GET[ v $c = rtrim($_GET[ c ], .html new A($v,$c); // 根據繼承關系再次加載文件。// extract($arr); //extract 的作用:從數組中將變量導入到當前的符號表,鍵做變量,值做值!// compact(); // — 建立一個數組,包括變量名和它們的值// assign display 實現參閱://www.jb51.net/article/140661.htm

class Controller{ public $array; public $key; public $val; public function assign($key,$val){ if(array($val)){ $this- array[ $key ] = $val; }else{ $this- array[ $key ] = compact($val); public function display($tpl = ){ // 模板為空自動加載。 $this- assign($this- key,$this- val); extract($this- array); // 如果模板為空就在這里根據get參數添加或者通過 $_SERVER[ PATH_INFO 轉換得到。(下面講解) if(file_exists($tpl)){ //模板存在就加載文件。 include $tpl;//繼承總model。這個model名字和控制器model的名字是一樣的。繼承方法同Controller,總model必須需要加上一個return。數據處理的indexmodel可以加return,也可以不加。class IndexModel extends Model{ public function index(){ // 數據處理。 // 需要返回數據就加上return。class IndexController extends Controller{ // 繼承 public function index(){ $m = Model( index  echo 實例化后的index方法 br  $this- assign( m ,$m); // 分配數據。 $this- display( index.html // 模板}

mvc雖然實現但是不夠人性化,因為每次都要加上get參數,變得很冗長,解決的關鍵在于$_SERVER[ PATH_INFO

用這個替換掉h m v三個參數。

1. 當輸入url為:http://mvc.com/index.php/home/index/index.html
這種情況下 index.php 斜線后面的apache會自動認為是一個路徑。
$_SERVER[ PATH_INFO ] = /home/index/index.html
第1個斜線 /home 前后臺
第2個斜線 /index 控制器
第3個斜線 /index.html 模板文件
如果后面加有參數例如:?a=18 b=38 他不會被加到$_SERVER[ PATH_INFO ]里面。$_POST 或者 $_GET 也不會加入$_SERVER[ PATH_INFO ]里面的內容,這樣就可以讓控制參數和數據的參數互不沖突。

2. U 方法的實現。重新改寫$_SERVER[ PATH_INFO ] 參數,改變為一個數據。array( home , Index , index

每次進入入口文件index.php都把他的PHP_INFO參數轉換為數組,在控制器或者其他的地方只要調用這個參數就行了。

// 這里如果做了大小寫的轉換,總控制器里面就不用了。function bca(){ $arr = explode( / ,ltrim($_SERVER[ PATH_INFO ], /  if(count($arr) == 3){ $arr[0] = strtolower($arr[0]); $arr[1] = ucfirst(strtolower($arr[1])); // 判斷后綴是不是 .html if(substr($arr[2],-5,strlen($arr[2])) == .html ){ $a = explode( . ,$arr[ 2  $arr[2] = strtolower($a[0]); }else{ $arr[2] = strtolower($arr[2]); $_SERVER[ PATH_INFO ] = $arr;// url方法做控制器或前后臺的跳轉。第三個參數是輸出還是return。默認是直接輸出。function U($string = ,$method = ,$bool = true){ // true 是直接輸出或者返回, // 獲取系統變量。 $path_info = $_SERVER[ PATH_INFO  $script_name = $_SERVER[ SCRIPT_NAME  // 判斷中間有沒有 / 以確定參數個數。 if(strpos($string, / )){ $arr = explode( / ,$string); if(count($arr) == 2){ // 兩個參數的情況。 $arr[0] = ucfirst(strtolower($arr[0])); $arr[1] = strtolower($arr[1]); $url = /{$path_info[0]}/{$arr[0]}/{$arr[1]}.html  }else if(count($arr) == 3){ // 三個參數的情況。 $arr[0] = strtolower($arr[0]); $arr[1] = ucfirst(strtolower($arr[1])); $arr[2] = strtolower($arr[2]); $url = /{$arr[0]}/{$arr[1]}/{$arr[2]}.html  }else{ $arr = strtolower($string); // 一個參數的情況。 $url = /{$path_info[0]}/{$path_info[1]}/{$arr}.html  // url 路徑的拼接。 if($method != ){ $u = $script_name.$url. ? .$method; if($bool == true){ echo $u; }else{ return $u; } }else{ $u = $script_name.$url; if($bool == true){ echo $u; }else{ return $u; }}

3. url重寫,去掉 index.php

打開apache配置文件重寫模塊,LoadModule rewrite_module modules/mod_rewrite.so

根下加入的改寫文件 .htaccess

內容:

 IfModule mod_rewrite.c  Options +FollowSymlinks RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L] /IfModule 

瀏覽器輸入url:http://mvc.com/home/index/index.html?a=19b=38
[REDIRECT_STATUS] = 200 重寫狀態ok。

發現 $_SERVER[ REDIRECT_URL 和 $_SERVER[ PATH_INFO 參數相同。所以參數后面就可以去掉index.php這安全的問題。

4. 模板替換(思路)

我們會發現有一個我們書寫的模板,里面有 {$arr} include file= / 等,我們把模板文件讀取后通過正則還有字符串把他轉換成正常的php文件。對文件名加密后放到替換后的文件夾下,每次url訪問的時候查看是否有緩存文件,判斷最后修改時間等驗證,

5. 數據緩存(思路)

json_encode() json_decode() file_get_contents() file_put_contents(); unserialize(); serialize(); 等存文文件里面或者memcache redis 等存儲。

您可能感興趣的文章:

yii2安裝詳細流程_php實

PHP實現一維數組與二維數組去重功能示例

CI框架(CodeIgniter)實現的數據庫增刪改查操作

以上就是PHP仿tp實現mvc框架基本設計思路與實現方法分析的詳細內容,PHP教程

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美日韩在线免费观看| 国产精品欧美激情| 国产精品久久不能| 在线观看亚洲区| 午夜精品久久久99热福利| 欧美做受高潮电影o| 国产精品日韩在线播放| 中文字幕成人精品久久不卡| 国产成人涩涩涩视频在线观看| 色悠悠久久88| 自拍偷拍亚洲一区| 影音先锋欧美在线资源| 亚洲аv电影天堂网| 国产精品美女主播| 国产欧美一区二区三区在线| 欧美一二三视频| 久久亚洲精品小早川怜子66| 狠狠爱在线视频一区| 亚洲香蕉成视频在线观看| 国产精品久久久久久久久久尿| 亚洲国产精品高清久久久| 亚洲人精品午夜在线观看| 亚洲免费人成在线视频观看| 伊人久久久久久久久久久| 91高清免费在线观看| 久久亚洲电影天堂| 青青草一区二区| www.日韩不卡电影av| 国产精品国产福利国产秒拍| 亚洲日本欧美日韩高观看| 精品人伦一区二区三区蜜桃免费| 亚洲电影免费观看高清| 日韩中文字幕网址| 欧美日韩中国免费专区在线看| 国产精品久久久久久久一区探花| 亚洲丁香婷深爱综合| 欧美性猛交xxxx乱大交3| 国产精品久久久久久av下载红粉| 久久免费观看视频| 久久精品国产亚洲精品2020| 亚洲一区二区日本| 亚洲影院在线看| 亚洲a区在线视频| 国产精品久久久久久婷婷天堂| 91国偷自产一区二区三区的观看方式| 欧美激情综合色| 国产精品18久久久久久首页狼| 欧美一区亚洲一区| 欧美综合第一页| 国产亚洲精品久久久久久牛牛| 欧美亚洲另类视频| 日韩在线观看免费全集电视剧网站| 欧美激情精品久久久久久免费印度| 亚洲精品mp4| 欧美丝袜第一区| 欧美成人精品一区| 亚洲免费伊人电影在线观看av| 91国语精品自产拍在线观看性色| 亚洲色图综合网| 97精品欧美一区二区三区| 日韩在线观看免费网站| 精品视频久久久久久| 精品少妇v888av| 91青草视频久久| 97视频在线观看成人| 丰满岳妇乱一区二区三区| 国模gogo一区二区大胆私拍| 有码中文亚洲精品| 亚洲a一级视频| 日韩在线免费观看视频| 91久久在线播放| 91久久久久久久一区二区| 国产精品6699| 日韩高清电影免费观看完整| 亚洲精品视频免费在线观看| 精品成人乱色一区二区| 精品久久久久久久中文字幕| 尤物九九久久国产精品的分类| 久久亚洲一区二区三区四区五区高| 国产综合久久久久| 国产精品免费一区豆花| 日韩av色综合| 亚洲欧洲日产国码av系列天堂| 欧美理论片在线观看| 久久精品中文字幕电影| 国产日韩欧美一二三区| 国产亚洲欧美日韩一区二区| 日韩中文综合网| 日韩在线观看免费网站| 亚洲成年网站在线观看| 日韩av电影手机在线| 国产一区私人高清影院| 国产精品国产三级国产aⅴ浪潮| 亚洲精选一区二区| 国产成人一区二区三区| 久久6精品影院| 不卡毛片在线看| 影音先锋欧美在线资源| 午夜伦理精品一区| 日韩激情视频在线播放| 伊人久久免费视频| 国产欧美va欧美va香蕉在线| 2018中文字幕一区二区三区| 中文字幕视频在线免费欧美日韩综合在线看| 日韩中文字幕免费视频| 欧美高清无遮挡| 久久久久国产视频| 久久男人资源视频| 欧美日韩在线看| 色噜噜亚洲精品中文字幕| 精品偷拍各种wc美女嘘嘘| 国产手机视频精品| 欧美一区二区三区免费观看| 亚洲www在线观看| 亚洲精品永久免费精品| 亚洲mm色国产网站| 中文字幕精品影院| 国产精品久久99久久| 日韩av中文字幕在线| 日本视频久久久| 国产精品视频一区二区三区四| 国产精品com| 亚洲春色另类小说| 韩剧1988在线观看免费完整版| 91av视频在线| 日韩在线中文视频| 91精品国产91久久久久久不卡| 欧美重口另类videos人妖| 亚洲综合精品伊人久久| 搡老女人一区二区三区视频tv| 日韩风俗一区 二区| 亚洲欧美日韩爽爽影院| 日韩精品免费综合视频在线播放| 国产在线视频一区| 国产精品wwww| 疯狂做受xxxx欧美肥白少妇| 亚洲国产成人精品电影| 在线播放日韩av| 日本三级韩国三级久久| 中文字幕日韩av综合精品| 色www亚洲国产张柏芝| 色偷偷888欧美精品久久久| 不卡毛片在线看| 国产成人福利视频| 亚洲人在线视频| 欧美精品videosex牲欧美| 欧美亚洲视频在线观看| 精品国产一区二区三区久久久| 亚洲精品国产美女| 欧美精品18videos性欧美| 欧美精品18videos性欧美| 日韩中文视频免费在线观看| 国产日产亚洲精品| 亚洲精品国精品久久99热| 青草成人免费视频| 97精品国产aⅴ7777| 91黑丝高跟在线| 亚洲欧美在线第一页| 日韩欧美中文字幕在线观看| 久久中文精品视频| 欧美成人激情图片网| 日韩电影在线观看免费| 成人欧美一区二区三区黑人| 国产成人精品免高潮费视频|