laravel理解

时间:2019-05-26 19:25:35 阅读:69次
laravel理解
<?php
class Container
{
    protected $binds;

    protected $instances;

    public function bind($abstract, $concrete)
    {
        if ($concrete instanceof Closure) {
            $this->binds[$abstract] = $concrete;
        } else {
            $this->instances[$abstract] = $concrete;
        }
    }

    public function make($abstract, $parameters = [])
    {
        if (isset($this->instances[$abstract])) {
            return $this->instances[$abstract];
        }

        array_unshift($parameters, $this);
        return call_user_func_array($this->binds[$abstract], $parameters);
    }
}


interface Board {
    public function type();
}

class CommonBoard implements Board {
    public function type(){
        echo '普通键盘';
    }
}

class MechanicalKeyboard implements Board {
    public function type(){
        echo '机械键盘';
    }
}

interface Mouse {
    public function type();
}

class CommonMouse implements Mouse {
    public function type(){
        echo '普通鼠标';
    }
}

class MechanicalMouse implements Mouse {
    public function type(){
        echo '机械鼠标';
    }
}

class Computer {
    protected $keyboard;
    protected $mouse;

    public function __construct (Board $keyboard,Mouse $mouse) {
        $this->keyboard = $keyboard;
        $this->mouse = $mouse;
    }
}

$container = new Container;

$container->bind('Board', function($container){
    return new CommonBoard;
});

$container->bind('Mouse', function($container){
    return new MechanicalMouse;
});

$container->bind('Computer',function($container,$module,$mouse){
    return new Computer($container->make($module),$container->make($mouse));
});

$computer = $container->make('Computer',['Board','Mouse']);

echo "<pre>";
print_r($computer);


扫描二维码关注程序员爱笔记,接收更多资讯

评论

快速评论