一次完整的请求,基本上都是在一个特定的文件上执行完成的
例如:所有程序通过访问入口文件index.php, 在index.php 引入其他文件,调用其他文件的方法,最终返回给客户端
简易调用及实例化控制器
1.浏览者 调用控制器,对他发出指令
2.控制器 按指令选取一个合适的模型
3.模型 按控制器指令取相应的数据
4.控制器 按指令选取相应视图
5.视图 把第三步取到的数据按用户想要的样子显示出来
目录结构
mvc
controller
IndexController.class.php
UserController.class.php
model
UserModel.class.php
view
UserView.class.php
template
user.php
lib
function.php
index.php
简易控制器类文件 IndexController.class.php
<?php
/**
* Desc: 默认类
* User: zyy
* Date: 2020-01-09
* Time: 下午 21:59
*/
class IndexController{
public function index()
{
echo 'this is IndexController index function';
echo __CLASS__;
}
}
UserController.class.php
<?php
/**
* Desc: 用户控制器类
* User: zyy
* Date: 2020-01-09
* Time: 下午 22:22
*/
class UserController{
/**
* 获取用户信息
*
* User: zyy
* Date: 2020-01-09
* Time: 下午 22:23
*/
public function getUserInfo()
{
$id = isset($_GET['id']) ? $_GET['id'] : 1;
$user_model = M('User');
$user_info = $user_model->getUserInfo($id);
$user_view = V('User');
$user_view->assign('user', $user_info);
$user_view->display();
}
}
简易模型类文件 UserModel.class.php
<?php
/**
* Desc: 用户模型类
* User: zyy
* Date: 2020-01-09
* Time: 下午 22:18
*/
class UserModel{
/**
* 获取一个用户信息
*
* @params int $id 用户id
* @return array $database[$id] 用户信息
* User: zyy
* Date: 2020-01-09
* Time: 下午 22:19
*/
public function getUserInfo($id)
{
//模拟数据库数据
$database = [
'1' => [
'name' => 'xiaoming',
'age' => 7,
'sex' => '男',
'class' => '3年2班'
],
'2' => [
'name' => 'xiaohua',
'age' => 7,
'sex' => '男',
'class' => '3年2班'
],
];
return $database[$id];
}
}
简易视图类 UserView.class.php
<?php
/**
* Desc: 用户视图类
* User: zyy
* Date: 2020-01-09
* Time: 下午 22:25
*/
class UserView{
public $data;
/**
* 赋值
*
* @params string $key
* @params mix $value
* User: zyy
* Date: 2020-01-09
* Time: 下午 22:26
*/
public function assign($key, $value)
{
$this->data[$key] = $value;
}
/**
* 渲染
*
* @params
* @params
* @return
* User: zyy
* Date: 2020-01-09
* Time: 下午 22:29
*/
public function display()
{
$data = $this->data;
$class_name = strtolower(substr(__CLASS__, 0, -4));
include_once(APP_PATH.'/template/'.$class_name.'.php');
}
}
常用函数类 function.php
<?php
/**
* 打印函数
*
* @params arr $arr
* User: zyy
* Date: 2020-01-09
* Time: 下午 21:50
*/
function dump($arr)
{
echo "<pre>";var_dump($arr);echo "</pre>";
}
/**
* 实例化控制器函数
*
* @params string $name 控制器类名
* @params string $method 控制器方法名
* User: zyy
* Date: 2020-01-09
* Time: 下午 21:50
*/
function C($name, $method)
{
require_once(APP_PATH.'/controller/'.$name.'Controller.class.php');
$class_name = $name.'Controller';
$obj = new $class_name();
$obj->$method();
}
/**
* 实例化模型函数
*
* @params string $name 模型类名
* @return object $modelObje 模型对象
* User: zyy
* Date: 2020-01-09
* Time: 下午 21:54
*/
function M($name)
{
require_once(APP_PATH.'/model/'.$name.'Model.class.php');
$model_name = $name.'Model';
$modelObj = new $model_name;
return $modelObj;
}
/**
* 实例化视图函数
*
* @params string $name 视图类名
* @return object $view 视图对象
* User: zyy
* Date: 2020-01-09
* Time: 下午 21:56
*/
function V($name){
require_once(APP_PATH.'/view/'.$name.'View.class.php');
$view_name = $name.'View';
$viewObj = new $view_name();
return $viewObj;
}
入口文件 index.php
<?php
//定义常量
define("APP_PATH", dirname(__FILE__));
//引入常用函数
require(dirname(__FILE__).'/lib/function.php');
//接收参数
$controller = isset($_GET['controller']) ? ucfirst($_GET['controller']) : 'Index';
$method = isset($_GET['method']) ? $_GET['method'] : 'index';
//实例化类,调用类方法
C($controller, $method);
模板文件 user.php
<html>
<head>这个是用户视图模板</head>
<body>
<p>名字:<?php echo $data['user']['name'];?></p>
<p>性别:<?php echo $data['user']['sex'];?></p>
<p>年龄:<?php echo $data['user']['age'];?></p>
<p>班级:<?php echo $data['user']['class'];?></p>
</body>
</html>
打开App,阅读手记