我正在构建一个小项目,尝试尽可能多地自学基础知识,这对我来说意味着不使用预制框架(正如Jeffonceputit所说,“不要重新发明轮子,除非你打算学习更多关于轮子的知识“[强调我的])并遵循测试驱动开发的原则。在我的探索中,我最近遇到了依赖注入(inject)的概念,这对于TDD来说似乎是必不可少的。我的问题是我无法完全理解它。到目前为止,我的理解是它或多或少相当于“让调用者传递它可能需要的任何其他类的类/方法,而不是让他们自己创建它们。”我有两个示例问题想用DI解决。这些重构是否走在正确的轨道上?数据库连接我打算只使用单例来处理数据库,因为我目前不希望使用多个数据库。最初,我的模型
我最近开始阅读有关依赖注入(inject)的内容,它让我重新思考我的一些设计。我遇到的问题是这样的:假设我有两个类(class):汽车和乘客;对于这两个类,我有一些数据映射器来处理数据库:CarDataMapper和PassengerDataMapper我希望能够在代码中做这样的事情:$car=CarDataMapper->getCarById(23);//returnsthecarobjectforeach($car->getPassengers()as$passenger){//returnsallpassengersofthatcar$passenger->doSomething
我目前在架构和实现方面面临一个非常有趣的困境。我有一个名为ServiceInterface的接口(interface),它有一个名为execute()的方法然后我对该接口(interface)有两个不同的实现:Service1和Service2,它们正确地实现了execute方法。我有一个名为MainController的Controller,这个Controller有一个针对ServiceInterface的“类型提示”(依赖注入(inject)),这意味着Service1和Service2都可以调用作为该依赖项注入(inject)的解决方案。现在是有趣的部分:我不知道要使用这些实现
周末我整理了一个正则表达式列表来检查GET、POST和COOKIEsuper全局变量中的sql注入(inject)。从各方面来看,它们在检测是否发现sql注入(inject)方面非常有效。我已经运行了很多我在各种sql注入(inject)文档中看到的注入(inject)攻击,但我正在寻找可能无法解释的更复杂的攻击。我很清楚最好的防御方法是验证/清理输入和参数化查询,但是这个脚本不是为了保护而设计的,而只是记录潜在的攻击。我也知道这会在各种情况下产生误报,但由于它仅用于记录日志,因此问题不大。检测脚本如下。$value){if(is_array($value)===true){testA
如何解决PHP中组成Controller类的问题,应该是:通过使用依赖注入(inject)轻松可测试,为最终程序员提供共享对象提供一种加载新用户库的方法往下看,使用依赖注入(inject)框架的Controller实例化问题是,派生的Controller可以使用程序员想要的任何资源(例如框架提供)。如何创建对共享资源(数据库、用户、存储、缓存、助手)、用户定义的类或其他库的统一访问?优雅的解决方案?我的问题有几种可能的解决方案,但没有一个看起来很优雅尝试通过构造函数传递所有共享对象?(即使有10个占位符也可以创建构造函数)创建getter、settters?(臃肿的代码)$contro
这个讨论我享有很高的声誉PHP男:PDOhasnousehere.aswellasmysql_real_escape_string.extremelypoorquality.这当然很酷,但我真的不知道建议使用mysql_real_escape_string或PDO来修复此代码有什么问题:varlayer;window.location.href="example3.php?layer="+layer;进入这个$layer=mysql_real_escape_string($_GET['layer']);$query="SELECTCategory,COUNT(BUSNAME)FROM`
这是我第一次使用DAO模式。据我所知read到目前为止,实现这种模式将帮助我将调用代码(Controller)与任何持久性实现分开——这正是我想要的;也就是说,我不想被限制使用任何特定的数据库或3rd方库。我正在使用MongoDB和morphia(作为示例)创建一些测试代码(以TDD方式),其中提供了morphiaBasicDAO类。据我所知,扩展BasicDAO需要一个接受Morphia和Mongo对象的构造函数;这些是非常具体的(第3方)类型,我真的不希望在DAO类本身之外四处游荡。我怎样才能拥有更多的可插拔架构?我的意思是,我应该如何重新配置我的应用程序以使用具有特定配置参数
这是我第一次使用DAO模式。据我所知read到目前为止,实现这种模式将帮助我将调用代码(Controller)与任何持久性实现分开——这正是我想要的;也就是说,我不想被限制使用任何特定的数据库或3rd方库。我正在使用MongoDB和morphia(作为示例)创建一些测试代码(以TDD方式),其中提供了morphiaBasicDAO类。据我所知,扩展BasicDAO需要一个接受Morphia和Mongo对象的构造函数;这些是非常具体的(第3方)类型,我真的不希望在DAO类本身之外四处游荡。我怎样才能拥有更多的可插拔架构?我的意思是,我应该如何重新配置我的应用程序以使用具有特定配置参数
如何在服务中注入(inject)所有参数?我知道我可以做到:arguments:[%some.key%]这会将parameters:some.key:"value"传递给服务__construct。我的问题是,如何在服务中注入(inject)parameters下的所有内容?我需要这个来制作导航管理器服务,其中将通过所有配置条目根据不同的设置生成不同的菜单/导航/面包屑。我知道我可以根据需要注入(inject)任意数量的参数,但由于它会使用其中的多个参数并且会随着时间的推移而扩展,我认为最好在一开始就传递整个事情。其他方法可能是我可以像在Controller中那样获取服务中的参数$th
我读过很多资料暗示laravelfacade最终是为了方便而存在的,这些类应该是injected允许松耦合。连TaylorOtwellhasapost解释如何做到这一点。看来我不是唯一一个wonderthis.useRedirect;classExampleclass{publicfunctionexample(){returnRedirect::route("route.name");}}会变成useIlluminate\Routing\RedirectorasRedirect;classExampleclass{protected$redirect;publicfunction__