简陋版 php MVC-1

一次完整的请求,基本上都是在一个特定的文件上执行完成的
例如:所有程序通过访问入口文件index.php,  在index.php 引入其他文件,调用其他文件的方法,最终返回给客户端
简易调用及实例化控制器

1.浏览者  调用控制器,对他发出指令
2.控制器  按指令选取一个合适的模型
3.模型    按控制器指令取相应的数据
4.控制器  按指令选取相应视图
5.视图    把第三步取到的数据按用户想要的样子显示出来
访问
http://localhost/mvc/index.php?controller=user&method=getUserInfo

结果


image.png
目录结构
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>
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,122评论 6 505
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,070评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,491评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,636评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,676评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,541评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,292评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,211评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,655评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,846评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,965评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,684评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,295评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,894评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,012评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,126评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,914评论 2 355

推荐阅读更多精彩内容