【依赖注入(DI)在PHP中的实现】教程文章相关的互联网学习教程文章

PHP 从另一个角度来分析 Laravel 框架的依赖注入功能【代码】

从根本上说,依赖注入不是让对象创建一个依赖关系,也不是让工厂对象去创建对象,而是将所需的依赖变成一个外部对象,使之成为一个"某些人的问题” 你为"某些人的问题”注入了类的依赖关系。在Laravel中,这个"某人”是 服务容器 。在Laravel中,服务容器负责通过构造函数注入类的依赖关系。 任何时候,你在一个控制器类中请求一个依赖,这个服务容器负责:自动地在构造函数中检测依赖关系 如果需要构建这个依赖关系 通过构造函数创...

php-依赖注入-这个非常大的构造函数有替代方案吗?【代码】

不久,我决定为我将要编写的新PHP应用程序采用Dependency Injection技术. 但是,我不确定我是否足够了解.我的问题是,baseClass依赖于各种项目,而许多不同的类将需要对其进行扩展.例如:namespace system;class baseClass {protected $logger;protected $filter;protected $database;protected $session;public function __construct(LoggerInterface $logger, filterInterface $filter, databaseInterface $database, sessionInterfa...

PHP中的依赖注入-简单示例回顾【代码】

我是OOP的新手,最近有asked question,这使我感到异常: >每个“操作”都应在单独的类中实施,>我所面临的问题应该通过依赖注入解决,>对于整个应用程序,我不能只有一个对象. 假设我有以下代码:class FtpConnect {public $server;private function connect () { ... }public __construct ($db, $mailer, $server) {$this->server = $server;$this->connect();} }class Database {public $database_property;... }class Phpmailer {p...

php – 循环依赖 – 注入直接相互依赖的对象【代码】

我已经使用了Dice PHP DI container很长一段时间,它在注入依赖项的简单性方面似乎是最好的. 从Dice Documentation开始:class A {public $b;public function __construct(B $b) {$this->b = $b;} }class B {}$dice = new \Dice\Dice; $a = $dice->create('A'); var_dump($a->b); //B object但是,当您必须使用直接相互依赖的对象时,由于无限循环,finall结果是服务器错误. 例:class A {public $b;public function __construct(B...

php – 适配器和依赖注入【代码】

我目前正在用PHP构建一个MVC应用程序(不使用任何框架).我正在使用yadif(https://github.com/beberlei/yadif)进行依赖注入. 我想构建一个登录模块.它应该能够使用适配器,例如,可以使用MySql数据库或某个LDAP目录设置登录验证.此设置将在管理区域中完成,并存储在数据库中. 我想我会有一个抽象的适配器:<?php abstract AbstractLoginAdapter{abstract function login($username, $pass){} }然后我会像这样实现适配器:<?php MySQLLo...

php – 如何使用依赖注入容器延迟加载?

我是Dependency Injection Containers之类的新手. 我有一个User对象,我想用容器构建.在我的情况下,用户可能有大量与他/她关联的评论对象,但我不会在每个请求中都需要它们. 以前,我会让User模型创建并加载Comment模型本身,但我意识到这是一个不好的做法. 如果我不想在构建用户时加载所有注释(例如 – 如果我想懒洋洋地加载注释),我如何使用DI和DIC实现此目的? 注意:我知道有解决方案,但我不想使用它们,直到我了解它们是如何工作的...

PHP依赖注入 – 在构造函数中包含类名【代码】

我是OO的新手,但我正在四处阅读并试图学习以“正确”的方式做事.我一直在阅读依赖注入,并且可以理解为什么它是一件好事,但是我对语法并不完全清楚. 例如,在SO上查看这个Basic PHP Object Oriented Instantiation and Dependency Injection问题,我会复制完全相同的代码(如答案所示的更改),然后打印出方法返回的内容:$author = new Author('Mickey', 'Mouse'); print $author->getFirstName();$question = new Question('what day i...

PHP – 如果自动加载,为什么要使用依赖注入?【代码】

请原谅这个问题的可能天真,但是我让自己真的很困惑.似乎最好使用依赖注入来解耦代码,以便您的类加载其依赖项.请想想以下类,其中Class Foo具有Bar类的依赖性namespace Classes;class Foo{protected barInstance;public function __construct(Bar $barInstance){$this->barInstance=$barInstance;}}但是,如果您正在自动加载您的课程,那么在不需要DI的情况下,以下内容完全相同吗?namespace Classes; use Classes/Bar;class Foo{prote...

php – 如何在完整的OO应用程序中处理依赖注入【代码】

我在课堂设计上陷入两难境地.我正在尽力尊重SOLID原则,但我不知道如何处理依赖注入. 这是我的困境: >我认为在类中实例化对象以避免引入依赖是一种不好的做法.那么在完整对象应用程序中应该在哪里创建依赖项呢?在一个只负责依赖实例化的特殊对象中?如果是,该对象的名称是什么以及如何定义它?这就是我们所说的“控制器”吗?>这个“控制器”,什么是单元测试的正确方法呢?我们应该进行单元测试吗?>在完整的POO应用程序中,如何避...

php – 聚合和依赖注入之间的区别【代码】

我最近研究了依赖注入设计模式.class User {private $db;public function __construct(Database $db) {$this->$db = $db; }}我不禁想知道这与我在聚合中学到的东西是一样的.如果我错了,请纠正我.我知道依赖注入和聚合的目标是不同的.有什么我想念的吗?解决方法:聚合是对象组合的一种形式.它与依赖注入无关. 另一方面,依赖注入不是关于对象如何关联,而是关于如何将其他对象(依赖关系)转换为特定对象.依赖关系可以是聚合,服务,存储...

PHP 依赖注入

出自维基百科 Wikipedia:依赖注入是一种允许我们从硬编码的依赖中解耦出来,从而在运行时或者编译时能够修改的软件设计模式。这句解释让依赖注入的概念听起来比它实际要复杂很多。依赖注入通过构造注入,函数调用或者属性的设置来提供组件的依赖关系。就是这么简单。 基本概念 我们可以用一个简单的例子来说明依赖注入的概念 下面的代码中有一个 Database 的类,它需要一个适配器来与数据库交互。我们在构造函数里实例化了适配器,...

php – 我需要一个依赖注入容器吗?【代码】

我有以下需要在我的程序开始时设置的依赖项://Set up dependencies $fileSettings = array(12, 'extra_lines', 'close_on_save'); $exporter = new Exporter('exporterpath/filename.txt', $fileSettings); $outputStream = new OutputStream(); $businessModel = new BusinessModel('param1', 'param2');//Run application $application = new Application($exporter, $outputStream, $businessModel); $application->s...

与PHP框架的依赖注入相结合的DAO模式是什么?【代码】

我正在开发一个基于依赖注入的PHP框架.我的数据对象是可注入的组件,与其他任何组件一样. 我有一个抽象的DAO类,每个模型都应该扩展,它具有: >基本的方法>对DI容器的引用,以实例化对象 简而言之,事情就像这样abstract class AbstractDao {protected $fields;protected $container; // This is the (injected) DI container, used to create instances.protected $driver; // The injected database driver (i.e. PDO)public functio...

PHP依赖注入容器与工厂【代码】

我正在使用silexphp / Pimple依赖注入容器(DIC),并且不确定如何处理经典的Factory模式. 例: 父类Animal.php有两个名为DogAnimal.php和CatAnimal.php的子类.子类的数量可以增长. 在这种情况下,我想创建一个Factory来创建新的Animal对象或Animal类的子对象. Pimple允许每个服务创建Factory方法. 在使用Pimple DIC时,我认为我不想将每个子类(Dog,Cat等)添加为服务.特别是随着名单的增长.对我来说,这似乎是对DIC的滥用,但也许我错了. ...

php – 在允许依赖注入的同时在类之间共享依赖【代码】

我有两节课ClassA , ClassB类通常依赖于两个基本服务和存储库ServiceA , ServiceB类(ClassA,ClassB)使用DI原则使用构造函数注入依赖项. 由于所有三个共享一些如上所述的公共服务,我想将所有常用方法和服务分组到类Base这样 基类class Base {protected $A;protected $B;public function __construct(ServiceA $A, ServiceB $B){$this->A = $A;$this->B = $B;} }儿童服务class Child extends Base {protected $C; public func...