巅云智能建站平台搭建版(创业流派版)火爆上线,毕生受权!新增:文章智能收罗+全站真静态打包+都会分站+智能小法式+不法词过滤+H5自顺应+智能链词等功效功效概况
建站专提News

PHP仿tp完成mvc框架根基设想思绪与完成体例阐发

一佰互联网站开辟设想(www.taishanly.com) 宣布日期 2020-04-25 14:40:44 阅读数: 152

本文实例报告了PHP仿tp完成mvc框架根基设想思绪与完成体例。分享给大师供大师参考,具体以下:

仿tp mvc根基设想与简略完成

一:文件加载知识

变量 常量 函数 类文件加载的函数或利用定名空间:require();   require_once();   include();   include_once();常量:define("DEFINE","");   const constant = "value";函数:function fun(){}  // global 利用全局变量    部分变量不被外部挪用。类:

<?phpclass A{  public $a = 10;  public function aa(){  // 不能利用一个a是由于,new A 以后 体例a会被主动履行,以是体例名不能够和类名抵触。    echo $this->a; // 输出属性.  }  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.taishanly.com/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.taishanly.com/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 等存储。

更多对于PHP相干内容感乐趣的读者可检查本站专题:《php面向工具法式设想入门教程》、《PHP数组(Array)操纵技能大全》、《PHP根基语法入门教程》、《PHP运算与运算符用法总结》、《php字符串(string)用法总结》、《php+mysql数据库操纵入门教程》及《php罕见数据库操纵技能汇总》

但愿本文所述对大师PHP法式设想有所赞助。

一佰互联是天下着名建站品牌办事商,咱们有九年、网站建造、网页设想、php开辟和域名注册及假造主机办事经历,供给的办事更是天下着名。最近几年来还整合团队上风自立开辟了可视化多用户”“3.0平台版,拖拽排版网站建造设想,轻松完成pc站、手机微网站、小法式、APP一体化全网营销网站扶植 ,已胜利的为天下上百家收集公司供给自助建站平台搭建办事。更多资讯:tags标签

相干消息more

21
04月
CSS+HTML自界说checkbox结果的

checkbox应当是一个比拟经常利用的html功效了,不过阅读器自带的checkbox常常款式不怎样都雅,并且差别阅读器结果也不一样。出于丑化... >>概况

26
04月
PHP自带体例考证邮箱、URL、IP是不是是正当

之前用PHP考证邮箱、URL、IP是不是是正当都是经由过程本身写正则来完成,可是偶然辰头脑发昏,能够会写出一个不是完整准确的正则,致使考证犯错,明天... >>概况

14
04月
Windows 10难以转变PC颓势 201

09月24日报道:Windows 10和英特尔的Skylake处置器的组合被视为提振PC市场的关头。Windows 10是多年来微软收到评估... >>概况

26
03月
收费HTML 网站空间,每个月200 GB 流

简介:二十几年前有个相称着名的网页空间办事「GeoCities」,能够说是初期网站办事的鼻祖,昔时有很是多近似的网页托管办事,让利用者将建造... >>概况

高端网站扶植

美工统筹SEO,为企业电子商务营销助力!

德律风:

023-85725751
建站

产物

域名注册 假造主机 云办事器 企业邮局
智能建站 APP打包 微站/小法式 创业平台
网站推行 媒体营销 智能收罗 AI机械人
400德律风 短信营销 店销机械人
私家定制 流派网站