站长网 PHP教程 PHP仿tp实现mvc框架基本设计思路与实现方法分析

PHP仿tp实现mvc框架基本设计思路与实现方法分析

副标题#e# 本篇章节讲解PHP仿tp实现mvc框架基本设计思路与实现方法。分享给大家供大家参考,具体如下: 仿tp mvc基本设计与简单实现 一:文件加载常识 变量 常量 函数 类文件加载的函数或者使用命名空间: require(); require_once(); include(); include_o

副标题#e#

本篇章节讲解PHP仿tp实现mvc框架基本设计思路与实现方法。分享给大家供大家参考,具体如下:

仿tp mvc基本设计与简单实现

一:文件加载常识

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

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里面的属性。

工厂模式参阅:

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 参数来解决

例如:

h为前后台,v为控制器,c为模板。

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方法
‘;
$this->assign(‘m’,$m); // 分配数据。
$this->display(‘index.html’); // 模板
}
}

mvc虽然实现但是不够人性化,因为每次都要加上get参数,变得很冗长,解决的关键在于$_SERVER['PATH_INFO'];

用这个替换掉h m v三个参数。

1. 当输入url为:

2. U 方法的实现。重新改写$_SERVER['PATH_INFO'] 参数,改变为一个数据。array( 'home','Index','index');

每次进入入口文件index.php都把他的PHP_INFO参数转换为数组,在控制器或者其他的地方只要调用这个参数就行了。

3. url重写,去掉 index.php

打开apache配置文件重写模块,

根下加入的改写文件 .htaccess

内容:

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

在浏览器输入url: 200 重写状态ok。

发现 $_SERVER['REDIRECT_URL'];$_SERVER['PATH_INFO']; 参数相同。所以参数后面就可以去掉index.php这安全的问题。

4. 模板替换(思路)

#p#副标题#e##p#分页标题#e#

我们会发现有一个我们书写的模板,里面有 {$arr} 等,我们把模板文件读取后通过正则还有字符串把他转换成正常的php文件。对文件名加密后放到替换后的文件夹下,每次url访问的时候查看是否有缓存文件,判断最后修改时间等验证,

5. 数据缓存(思路)

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

更多关于PHP相关内容感兴趣的读者可查看本站专题:《》、《》、《》、《》、《》、《》及《》

希望本文所述对大家PHP程序设计有所帮助。

本文来自网络,不代表站长网立场,转载请注明出处:https://www.zwzz.com.cn/html/jc/php/2021/0525/6063.html

作者: dawei

【声明】:站长网内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。
联系我们

联系我们

0577-28828765

在线咨询: QQ交谈

邮箱: xwei067@foxmail.com

工作时间:周一至周五,9:00-17:30,节假日休息

返回顶部