Blogger Information
Blog 27
fans 1
comment 0
visits 22502
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
依赖注入,MVC的基本原理和路由的解析-2019年10月11日
思杰的博客
Original
723 people have browsed it

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

Correction status:qualified

Teacher's comments:完成的不错
Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments