不久我决定为我即将编写的新PHP应用程序采用依赖注入(inject)技术。但是,我不完全确定我是否理解得足够多。我的问题是,baseClass依赖于各种项目,而许多不同的类将需要扩展它。例如:namespacesystem;classbaseClass{protected$logger;protected$filter;protected$database;protected$session;publicfunction__construct(LoggerInterface$logger,filterInterface$filter,databaseInterface$database
不知何故,我的思绪远离了当前的问题,我犯了一个可怕的错误..我在一个只初始化类属性的方法中调用了一个父构造函数。或者我......父构造函数的工作是设置ID值。好吧,PHP允许我这样做。但这不就错了吗?看起来我可以用同样的方式调用类自己的构造函数..构造函数不是应该只在创建类的实例时才被允许调用吗...而且它们只在创建实例时被调用..";}}classBextendsA{publicfunctiontest(){parent::__construct();}}$b=newB();$b->test();//OUTPUT://Test//Test?>编辑:所以结论是PHP允许您在方法内调用
我有一个包含18个属性的记录类。在将该类提交到数据库之前,所有18个属性都必须具有经过验证的数据。因为我正在OOP化一个工作的程序web应用程序,所以我进行了这种倒退。首先,我介绍了修改现有记录的工作流程。当时,将所有18个属性都放入__construct方法并避免setter的垃圾加载是有意义的。一个单独的loader类处理数据库业务,可以返回单个对象或记录对象数组。一切正常。但后来是时候解决新记录创建工作流程了,突然我需要实例化一个空记录,除了我的记录构造函数是一个需要18个参数的饥饿的野兽.........所以你剥离了构造函数?但是每次我想使用现有记录时,我都必须添加18个set
假设你有这个类classAi1ec_Less_Parser_Controller{/***@varAi1ec_Read_Variables_Startegy*/private$read_variable_strategy;/***@varAi1ec_Save_Variables_Strategy*/private$write_variable_strategy;/***@varAi1ec_Less_Variables_Collection*/private$less_variables_collection;/***@varAi1ec_Less_Parser*/private$ai1e
在JSDoc中,我可以用@constructor标记我的构造函数。现在我试图在PHPDoc规范中找到如何对PHP构造函数执行相同的操作,但他们从未提及任何类似的内容。在PHP中标记我的构造函数的正确方法是什么。这个:/***@constructor*/publicfunction__construct(){}似乎无效。 最佳答案 PHP文档生成器会将__construct()方法识别为构造函数。不需要特殊标记。 关于PHPDoc-如何在PHP中标记构造函数,我们在StackOverflo
假设:(1)有一个带有构造函数的类,其方法使用注入(inject)对象,如:classSomeClass{protected$object1;protected$object2;publicfunction__construct(Object1Interface$object1,Object2Interface$object2){$this->object1=$object1;$this->object2=$object2;}//methodsthatuseObject1andObject2classesby$this->object1and$this->object2.}和(2)是同
例如...如果我有一个模块类:classModule{var$page;functionModule($page){$this->page=$page;}}然后是特定的新闻模块类:classNewsextendsModule{functionaFunction(){return$this->page->id;}}我可以像这样实例化新闻吗:$page=newPage();$news=newNews($page);或者我必须这样做:$page=newPage();$news=newNews();$news->page=$page;谢谢。PS:我对OOPphp很陌生,所以请多多包涵,哈哈。我
我有一个用户详细信息类。我想从我的应用程序调用例如UserDetails::$email,但它是空的,因为它不执行构造函数。我该如何解决?hasIdentity()){$this->email=$auth->getIdentity()->email;$this->password=$auth->getIdentity()->password;$this->role=$auth->getIdentity()->role;$this->active=$auth->getIdentity()->active;}}} 最佳答案 我认为您应该
关闭。这个问题不符合StackOverflowguidelines.它目前不接受答案。要求提供代码的问题必须表现出对所解决问题的最低限度理解。包括尝试过的解决方案、为什么它们不起作用,以及预期结果。另请参阅:StackOverflowquestionchecklist关闭9年前。Improvethisquestion只是想知道这是否是一种常见的做法。基本上,构造函数正在调用一些失败时抛出的初始化函数。我的想法是,将异常重新抛回到创建对象的位置是有意义的,因为那是发送实际输出的位置。这是针对这种情况的“最佳实践”吗?还是有更标准的方法来做到这一点?x=$this->functionTha
使用phpReflectionClass我可以找到必须在类构造函数中注入(inject)哪些参数才能创建新实例。$class=newReflectionClass($this->someClass);$constructor=$class->getConstructor();$parameters=$constructor->getParameters();是否还有一种方法可以获取这些参数的依赖关系。因此,如果someClass的构造函数如下所示:publicfunction__construct(Dependency$dependency){$this->dependency=$de