博客列表 >依赖注入,MVC的基本原理和路由的解析-2019年10月11日

依赖注入,MVC的基本原理和路由的解析-2019年10月11日

思杰的博客
思杰的博客原创
2019年10月17日 16:02:04716浏览

1. 写一个依赖注入的案例, 内容自定义 

2. 写一个mvc应用的案例, 内容自定义 

3. 写一个简单的路由, 理解路由的原理与目标


课程笔记:

        单例模式:类的对象只能实例化一次,应用场景是:数据库的链接,HTTP的请求,通过把构造函数设置成为私有属性,让类的外部无法进行实例化,只能通过调用类里面的方法去进行实例化。方法里面进行判断,如果该类已经被实例化,则已经实例化的对象,如果类还没有被实例化,则实例化一个新的对象,然后返回回去。

        

        工厂模式:批量创建对象的类。如果没有专门拿来创建对象的类的话,用户在调用的时候,就需要知道自己具体需要调用的类是什么,假如这个类名修改了,则用户调用方也需要修改自己的代码。有了工厂类,用户只需要关心自己的调用的是工厂类,并且把自己的参数输入进去,而不需要关心自己这个生成对象需要通过什么类去解决。生成类的方法由工厂类去调用,这样达到解耦的目的。


        MVC:M是model,数据模型的意思,是用来读写数据的。V是view,视图的意思,负责对外展示的代码。C是controller,控制器的意思,用来协调后端的数据和前端展示的派发器。

        

        服务容器:将对象的创建和使用过程统一管理起来。对象的管理器,把对象的实例化放在容器中,然后把对象从容器中取出来。


        门面模式(facade):把调用代码静态化。        


写一个依赖注入的案例, 内容自定义 

        依赖注入,就是将别的类的方法,通过参数或者方法的形式,直接注入到当前类中,就叫做依赖注入,依赖注入是解耦的重要手段。

实例

<?php
require 'Model.php';
require 'View.php';

class Controller{
    public function index(Model $model,View $view){

        $data = $model->getData();


        return $view->fetch($data);

    }


}
$model =new Model();
$view= new View();
$controller = new Controller();
//将Model和View的类实例,作为参数注入到方法中
echo $controller->index($model,$view);

运行实例 »

点击 "运行实例" 按钮查看在线实例

如果新建model和controller对象是在控制器类里面实现,那么假如model类和view类的构造方法发生了改变,或者类名发生了变化,那么控制器类也就变得不能够使用了。所以用参数的方法注入到控制器类中,那么控制器类就只用专注自己的业务逻辑即可,不用关心其他类的实现方式。


写一个mvc应用的案例, 内容自定义 

我将老师课堂上讲的小案例,通过连接数据库,将数据显示到了前端页面上。由于MVC模式的相互独立工作,所以我只需要在model类中将读取的数据方法重写,然后将前端相应的位置重写即可。中间的controller类不需要去动他,这样代码相互之间的独立性就很强了。

model类


实例

<?php

class Model{


    public function getData(){
        $dsn = "mysql:host=127.0.0.1;dbname=huangsijie";
        $username = "root";
        $password = "root";
        $pdo = new PDO($dsn,$username,$password);
        $sql = "select * from `staff`";
        $stmt = $pdo->prepare($sql);
        $stmt->execute();
        $array = $stmt->fetchAll(PDO::FETCH_ASSOC);
        return $array;
    }
}

运行实例 »

点击 "运行实例" 按钮查看在线实例

controller类


实例

<?php
require 'Model.php';
require 'View.php';

class Controller{
    public function index(Model $model,View $view){

        $data = $model->getData();


        return $view->fetch($data);

    }


}
$model =new Model();
$view= new View();
$controller = new Controller();
//将Model和View的类实例,作为参数注入到方法中
echo $controller->index($model,$view);

运行实例 »

点击 "运行实例" 按钮查看在线实例

view类


实例

<?php
class View{
    public function fetch($data){
        $table = '<table border="1" cellspacing="0" width="600" >';
        $table .= '<caption>人民的名义信息表</caption>';
        $table .= '<tr bgcolor="lightblue"><th>ID</th><th>姓名</th><th>年龄</th><th>性别</th><th>职位</th><th>手机</th><th>入职日期</th></tr>';

        foreach ($data as $product) {
            if($product['sex']==1){
                $product['sex'] = '男';
            }else{
                $product['sex'] = '女';
            }
            $product['hiredate'] = date('Y年m月d日',$product['hiredate']);

            $table .= '<tr>';
            $table .= '<td align="center">' . $product['staff_id'] . '</td>';
            $table .= '<td align="center">' . $product['name'] . '</td>';
            $table .= '<td align="center">' . $product['age'] . '</td>';
            $table .= '<td align="center">' . $product['sex'] . '</td>';
            $table .= '<td align="center">' . $product['position'] . '</td>';
            $table .= '<td align="center">' . $product['mobile'] . '</td>';
            $table .= '<td align="center">' . $product['hiredate'] . '</td>';
            $table .= '</tr>';
        }
        $table .= '</table>';

        return $table;
    }
}

运行实例 »

点击 "运行实例" 按钮查看在线实例

111.png

写一个简单的路由, 理解路由的原理与目标

        路由就是域名访问的路径,我们通过修改路由,可以将域名解析做自定义的处理。我们通过$_SERVER将域名里面的路由地址解析出来,然后通过explode函数将每个/后面的词变成一个数组。

<?php


$url = $_SERVER['REQUEST_URI'];
$req = explode('/',$url);
echo '<pre>';
print_r($req);

$route = array_slice($req,3,3);
echo '<pre>';
print_r($route);
list($module,$controller,$action) = $route;
echo $module.'  '.$controller.'   '.$action;

$values = array_slice($req,6,6);
for ($i =0 ; $i < count($values); $i+=2){
    $user[$values[$i]] = $values[$i+1];
}
echo '<pre>';
print_r($user);

class User{
    public function add($name,$age,$salary){
        return __METHOD__.'方法: 姓名'.$name.' 年龄'.$age.' 工资'.$salary;
    }
}

echo call_user_func_array([(new User()),'add'],$user);

222.png

声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议