• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

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

php 搞代码 4年前 (2022-01-22) 17次浏览 已收录 0个评论

这篇文章主要介绍了PHP仿tp实现mvc框架基本设计思路与实现方法,简单讲述了php实现tp框架的原理,并结合实例形式分析了相关控制器、视图及URL访问操作技巧与注意事项,需要的朋友可以参考下

本文实例讲述了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里面的属性。

工厂模式参阅:http://www.gaodaima.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 实现参阅:http://www.gaodaima.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。<span style="color:transparent">/本文来源gaodai#ma#com搞*!代#%^码网%</span><sub>搞代gaodaima码</sub>  }}class IndexController extends Controller{ // 继承  public function index(){    $m = Model("index");    echo '实例化后的index方法<br>';    $this->assign('m',$m); // 分配数据。    $this->display('index.html'); // 模板  }}

搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:PHP仿tp实现mvc框架基本设计思路与实现方法

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址