首页 > 开发 > PHP > 正文

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

2024-05-04 22:43:16
字体:
来源:转载
供稿:网友

本文实例讲述了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.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'); // 模板  }}            
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表