继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

2020-01-09 MVC (一) 简易版MVC

一句话儿的事
关注TA
已关注
手记 12
粉丝 1
获赞 1
一次完整的请求,基本上都是在一个特定的文件上执行完成的
例如:所有程序通过访问入口文件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,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP