详解PHP设计模式之依赖注入模式
程序员文章站
2022-06-25 16:48:54
目的实现了松耦合的软件架构,可得到更好的测试,管理和扩展的代码用法databaseconfiguration 被注入 databaseconnection 并获取所需的 $config 。如果没有依赖...
目的
实现了松耦合的软件架构,可得到更好的测试,管理和扩展的代码
用法
databaseconfiguration 被注入 databaseconnection 并获取所需的 $config 。如果没有依赖注入模式, 配置将直接创建 databaseconnection 。这对测试和扩展来说很不好。
例子
doctrine2 orm 使用依赖注入。 例如,注入到 connection 对象的配置。 对于测试而言, 可以轻松的创建可扩展的模拟数据并注入到 connection 对象中。
symfony 和 zend framework 2 已经有了依赖注入的容器。他们通过配置的数组来创建对象,并在需要的地方注入 (在控制器中)。
uml 图
代码databaseconfiguration.php
<?php namespace designpatterns\structural\dependencyinjection; class databaseconfiguration { /** * @var string */ private $host; /** * @var int */ private $port; /** * @var string */ private $username; /** * @var string */ private $password; public function __construct(string $host, int $port, string $username, string $password) { $this->host = $host; $this->port = $port; $this->username = $username; $this->password = $password; } public function gethost(): string { return $this->host; } public function getport(): int { return $this->port; } public function getusername(): string { return $this->username; } public function getpassword(): string { return $this->password; } } ?>
databaseconnection.php
<?php namespace designpatterns\structural\dependencyinjection; class databaseconnection { /** * @var databaseconfiguration */ private $configuration; /** * @param databaseconfiguration $config */ public function __construct(databaseconfiguration $config) { $this->configuration = $config; } public function getdsn(): string { // 这仅仅是演示,而不是一个真正的 dsn // 注意,这里只使用了注入的配置。 所以, // 这里是关键的分离关注点。 return sprintf( '%s:%s@%s:%d', $this->configuration->getusername(), $this->configuration->getpassword(), $this->configuration->gethost(), $this->configuration->getport() ); } } ?>
测试tests/dependencyinjectiontest.php
<?php namespace designpatterns\structural\dependencyinjection\tests; use designpatterns\structural\dependencyinjection\databaseconfiguration; use designpatterns\structural\dependencyinjection\databaseconnection; use phpunit\framework\testcase; class dependencyinjectiontest extends testcase { public function testdependencyinjection() { $config = new databaseconfiguration('localhost', 3306, 'domnikl', '1234'); $connection = new databaseconnection($config); $this->assertequals('domnikl:1234@localhost:3306', $connection->getdsn()); } } ?>
以上就是详解php设计模式之依赖注入模式的详细内容,更多关于php设计模式之依赖注入模式的资料请关注其它相关文章!
上一篇: 根本不是变态辣
下一篇: CSS filter 有什么神奇用途