博客列表 >单例模式、工厂模式、MVC原理、容器的使用、门面的使用及路由的功能-2019-10-11

单例模式、工厂模式、MVC原理、容器的使用、门面的使用及路由的功能-2019-10-11

无聊了的博客
无聊了的博客原创
2019年10月12日 17:52:51720浏览

1、写一个依赖注入的案例

实例

<?php

class Test1
{
    protected $val;
    public function set($val){
        return $this->val = $val;
    }
}

//1、基本方式实现
class Test2
{
    public function get(){
        $test1 = new Test1(); 
        echo $test1->set('循序渐进实现容器依赖注入方式----基本方式实现');
    }
}

$test2 = new Test2();
$test2->get();
echo '<hr>';
//2、构造方式 或者 方法传参方式
class Test3
{
    protected $test1;
    public function __construct(Test1 $test1){
        $this->test1 = $test1;
    }
    public function get(){
        echo $this->test1->set('循序渐进实现容器依赖注入方式----构造函数传对象方式实现');
    }
}

$test1 = new Test1();        
$test2 = new Test3($test1);
$test2->get();

echo '<hr>';
//3、采用容器方式进行管理对象

class Container
{
    //用于存储对象数组
    static protected $data = [];

    //创建对象  采用闭包方式 通过回调函数返回对象
    public function bind($name, $Func){
        self::$data[$name] = $Func;
    }

    //获取对象,并采用回调函数 调用类中的方法
    public function make($name,$args =[]){   
        return call_user_func(self::$data[$name],$args);        
    }

}

$container = new Container();
$container->bind('Test1',function(){
    return new Test1();
});

class Test4
{

    public function get(Container $container){        
        return $container->make('Test1')->set('循序渐进实现容器依赖注入方式----采用容器管理创建返回对象');
    }
}

$test4 = new Test4();
print_r($test4->get($container));

echo '<hr>';

//4、采用门面方式实现静态方式调用

class Container1
{
    //用于存储对象数组
    static protected $data = [];

    //创建对象  采用闭包方式 通过回调函数返回对象
    public function bind($name, $Func){
        self::$data[$name] = $Func;
    }

    //获取对象,并采用回调函数 调用类中的方法
    public function make($name,$args =[]){   
        return call_user_func(self::$data[$name],$args);        
    }

}

$container = new Container1();
$container->bind('Test1',function(){
    return new Test1();
});

//门面类
class Facade
{
    //容器对象
    protected static $container = null;

    //存放数据数组
    static protected $data = [];

    //初始化容器对象
    public static function init(Container1 $container){
        static::$container = $container;
    }

    //数据存储
    static public function setDate(){
        self::$data = self::$container->make('Test1')->set('循序渐进实现容器依赖注入方式----采用容器管理创建返回对象');
    }

    //进行渲染的方法
    static public function fetch(){
        return self::$container->make('Test1')->set(self::$data);
    }
}

//创建一个商品类
class Car extends Facade
{

}

class Test5
{


    public function get(Container1 $container){ 
        Car::init($container);       
        Car::setDate();
        return Car::fetch();
    }
}

$test4 = new Test5();
print_r($test4->get($container));

运行实例 »

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

2、写一个MVC应用的案例

    

实例

//view.php

<?php

class View
{
    function fetch($data){
        echo $data;
    }
}

//model.php

class Model
{
    function getVal(){
        return 'MVC模式获取数据';
    }
}

//controller.php

include 'model.php';
include 'view.php';
class Controller
{
    function index(){
        $model = new Model();
        $view = new View();
        $data = $model->getVal();
        return $view->fetch($data);
    }
}

$obj = new Controller();
$obj->index();

运行实例 »

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

3、写一个简单的路由

实例

<?php
//"http://demo.com/10-11/router.php/admin/Index/add/a/1/b/2/c/3";
$uri = "/10-11/router.php/admin/Index/add/a/1/b/2/c/3";//$_SERVER["REQUEST_URI"];

$uriArr = explode('/',$uri);


$class = $uriArr[4];
$action = $uriArr[5];

$param = array_slice($uriArr,6);

for($i=0;$i<count($param);$i+=2){
    $params[$param[$i]] = $param[$i+1];
}

class Index
{
    function add($a,$b,$c){
        echo $a + $b + $c;
    }
}

call_user_func_array([new $class(),$action],$params);

运行实例 »

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


总结:

1、单例模式:三私一公  三私:对象实例用于存储、__construct防止实例化、__clone防止克隆  一公:对外访问进行生成实例进行存储判断,防止多次创建

2、工厂模式:专门生成对象的工厂

3、依赖注入:将对象作为参数进行传递,可以实现低耦合,防止调用对象修改导致其他引用修改

4、MVC模式:model  模型进行crud处理数据   view  视图进行页面展示  controller  控制器进行引入模型和视图进行返回

5、路由:将url中的操作映射到模块对应控制器中的方法上并携带参数值,通过获取url中的控制器及方法来触发相应的对象方法

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