• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    详解PHP设计模式之依赖注入模式

    目的

    实现了松耦合的软件架构,可得到更好的测试,管理和扩展的代码

    用法

    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设计模式之依赖注入模式的资料请关注脚本之家其它相关文章!

    您可能感兴趣的文章:
    • PHP设计模式(观察者模式)
    • 浅谈PHP设计模式之门面模式Facade
    • 浅谈PHP设计模式之对象池模式Pool
    • PHP设计模式之迭代器模式的使用
    • 详解PHP八大设计模式
    • PHP设计模式之原型模式示例详解
    • PHP设计模式之命令模式示例详解
    • PHP八大设计模式案例详解
    上一篇:PHP的命令行扩展Readline相关函数的使用
    下一篇:详解PHP服务器如何在有限的资源里最大提升并发能力
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯

    时间:9:00-21:00 (节假日不休)

    地址:江苏信息产业基地11号楼四层

    《增值电信业务经营许可证》 苏B2-20120278

    详解PHP设计模式之依赖注入模式 详解,PHP,设计模式,之,依赖,