看 Laravel 源代码了解 Container

i

<?phpfunction info($msg){    echo $msg;}class LogToFile {    public function execute($message) {        info('log the message to a 美羊羊 :'.$message);    }}class UseLogger {    protected $logger;    public function __construct(LogToFile $logger) {        $this->logger = $logger;    }    public function show() {        $user = '小灰灰';        $this->logger->execute($user);    }}$useLogger = new UseLogger(new LogToFile());$useLogger->show();

ii

A

<?php function info($msg){    echo $msg;}class LogToFile {    public function execute($message) {        info('log the message to a 美羊羊  :'.$message);    }}class LogToDD {    public function execute($message) {        info('log the message to 喜羊羊 :'.$message);    }} class UseLogger {    protected $logger;    public function __construct(LogToFile $logger) {        $this->logger = $logger;    }    public function show() {        $user = '小灰灰';        $this->logger->execute($user);    }}$useLogger = new UseLogger(new LogToFile()); $useLogger->show();

B

<?php function info($msg){    echo $msg;}class LogToFile {    public function execute($message) {        info('log the message to a 美羊羊  :'.$message);    }}class LogToDD {    public function execute($message) {        info('log the message to 喜羊羊 :'.$message);    }} class UseLogger {    protected $logger;    public function __construct(LogToDD $logger) {        $this->logger = $logger;    }    public function show() {        $user = '小灰灰';        $this->logger->execute($user);    }}$useLogger = new UseLogger(new LogToDD()); $useLogger->show();

iii

<?phpfunction info($msg){    echo $msg;}interface Logger {    public function execute($message);}class LogToFile implements Logger {    public function execute($message) {        info('log the message to a 美羊羊 :'.$message);    }}class LogToDD implements Logger {    public function execute($message) {        info('log the message to 喜羊羊 :'.$message);    }} class UseLogger {    protected $logger;    public function __construct(Logger $logger) {        $this->logger = $logger;    }    public function show() {        $user = '小灰灰';        $this->logger->execute($user);    }}$useLogger = new UseLogger(new LogToFile()); $useLogger->show();echo '<br>';$useLogger = new UseLogger(new LogToDD()); $useLogger->show();

终极版

<?php function info($msg){    echo $msg;}interface Logger {    public function execute($message);}class LogToFile implements Logger {    public function execute($message) {        info('log the message to a 美羊羊 :'.$message);    }}class LogToDD implements Logger {    public function execute($message) {        info('log the message to 喜羊羊 :'.$message);    }} class UseLogger {    protected $logger;    public function __construct(Logger $logger) {        $this->logger = $logger;    }    public function show() {        $user = '小灰灰';        $this->logger->execute($user);     }}class SimpleContainer {    // 用于存储所有绑定 key-value    protected static $container = [];    public static function bind($name, Callable $resolver) {        static::$container[$name] = $resolver;    }    public static function make($name) {        if(isset(static::$container[$name])){            $resolver = static::$container[$name] ;            return $resolver();        }        throw new Exception("Binding does not exist in container");    }}SimpleContainer::bind(Logger::class, function () {    return new LogToDD();});$useLogger3 = new UseLogger(SimpleContainer::make(Logger::class));$useLogger3->show();