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

前端之家收集整理的这篇文章主要介绍了PHP仿tp实现mvc框架基本设计思路与实现方法分析前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

本文实例讲述了PHP仿tp实现mvc框架基本设计思路与实现方法分享给大家供大家参考,具体如下:

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

一:文件加载常识

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

PHP;"> 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. 模板替换(思路)

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

5. 数据缓存(思路)

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

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

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

原文链接:https://www.f2er.com/php/16025.html

猜你在找的PHP相关文章