Zend framework zend_表单访问父表单元素

Zend framework zend_表单访问父表单元素,zend-framework,inheritance,zend-form,subclass,Zend Framework,Inheritance,Zend Form,Subclass,我找不到任何关于如何在子类表单中使用父表单元素的参考。可能是因为除了我,其他人都很清楚。这把我难住了。这就是我试过的 首先,在我的表单构造函数中,我调用了 parent::__construct($options = null); 然后像这样访问父元素 $type = parent::setName($this->type); 问题是所有父表单元素都将显示是否显式调用。有人说,“不要使用_construct(),而是使用init()函数。所以我将构造函数改为init(),注释掉父构造函

我找不到任何关于如何在子类表单中使用父表单元素的参考。可能是因为除了我,其他人都很清楚。这把我难住了。这就是我试过的

首先,在我的表单构造函数中,我调用了

parent::__construct($options = null);
然后像这样访问父元素

$type = parent::setName($this->type);
问题是所有父表单元素都将显示是否显式调用。有人说,“不要使用_construct(),而是使用init()函数。所以我将构造函数改为init(),注释掉父构造函数,然后运行表单。它爆料说它不能为setName()传递空值。我注释掉了所有的seName()调用并运行表单,但只显示子类表单中实例化的元素

我的问题是:如果不使用父构造函数,如何获取和使用父构造函数的表单元素


解决:由于构造函数被切换到init,对父级的调用也需要切换。对于有php背景的人来说很容易。对于没有php背景的人来说就不那么容易了

使用


你应该先学习OOP原理。显然你对它没有任何理解。你需要在你编写的Form_Class::init()方法中调用parent::init(),但是为什么呢?因为否则父方法不会被调用,并且会被From_Class方法覆盖

另一件事是,当您有一个带有输入和提交的父类“SuperForm”时,您的“SuperForm\u子类”将分配相同的元素。不需要使用“parent::*”来访问元素(唯一的例外是,如果您使用静态SuperForm变量来存储它们,这毫无意义)

您可以像在SuperForm类中一样,轻松地在SuperForm_子类中使用$this->inputElement和$this->submitElement


在您的示例中,可以使用_construct()很好,但调用父构造函数的条件相同。您也可以访问在那里生成的元素…

解决了:由于构造函数切换到init,对父构造函数的调用也需要切换。对于具有php背景的人来说很容易。对于不具有php背景的人来说就不那么容易了

使用


父::init()

嗨,Michael,欢迎使用Stack Overflow!您可以做一些事情来帮助其他用户看到您的解决方案,并为正确答案打分。如果发布的答案之一正确,您可以选择该答案作为正确答案。如果不正确,您可以发布自己的解决方案作为答案,然后选择正确答案。这样,其他人会看到你的问题已经得到了回答;没有必要把“问题解决了”“在问题标题中。希望这有帮助;回头见!谢谢,韦斯。我不太确定该如何解决这个问题。同时,我希望能尽快找到解决方案,以防其他人需要。你应该学会一些礼貌和同理心,因为显然你根本不理解这些术语。你提出的解决方案完全被你的傲慢所掩盖。并不是每个人都是在接受过正规培训后才进入编程领域的。我来到这个论坛寻求解决办法。如果你只想诋毁那些比你了解得少的人,那就闭嘴吧。当框架出现时,许多用户倾向于认为他们可以在不懂任何原则的情况下用PHP做事。我对这个事实不满意。我花了相当多的时间帮助别人解决编程问题。我渴望帮助任何人。但当有人以一种明显的方式问一个问题时,我往往反应过度,他没有常识,试图做一些“大事”。我认为我的反应一点也不粗鲁。我很抱歉,如果事实上,你应该先学习基础知识伤害了你的感觉。然后,请把我的回答当作一个没有仇恨的好建议。五年后看到这一点,我不得不说我对自己的反应感到惭愧。很抱歉
parent::init();