看 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();