Php 无法获取OOP类的输入字段

Php 无法获取OOP类的输入字段,php,input-field,Php,Input Field,我希望有人能帮助我,我是oop初学者,下面的脚本给出了输出getElement(); foreach($this->getAttr()作为$key=>$value){ $html.=“$key=”; $html.=“\”$value\“>”; } 返回$html; } } $element=新元素(); $attr=新的attrType(); $build=newbuild(); $attr->addElement('input'); $attr->addAttr('type','tex

我希望有人能帮助我,我是oop初学者,下面的脚本给出了输出
getElement();
foreach($this->getAttr()作为$key=>$value){
$html.=“$key=”;
$html.=“\”$value\“>”;
}
返回$html;
}    
}
$element=新元素();
$attr=新的attrType();
$build=newbuild();
$attr->addElement('input');
$attr->addAttr('type','text');
echo$build->Builder();

您正在创建单独的对象,并希望它们共享属性,这就是问题所在。如果将最后3行更改为此,代码将正常工作:

$build->addElement('input');
$build->addAttr('type','text');
echo $build->Builder();

虽然代码可以工作,但依我看,这并不是最好的方法。在继承时,一个很好的经验法则是问问自己:派生类可以被认为是它派生的类吗?换句话说,它是一个
Builder
一个
元素
,我不这么认为。对我来说,
Builder
将获取一个元素并构建HTML,因此我不会从
元素
派生
Builder

在这种情况下,继承的一个很好的例子是使用基本
元素
类,然后从中派生特定的元素,例如
TextInput
TextArea
RadioButton
。这些元素中的每一个都可以被视为
元素
,因此是继承的好选择


注意不要使事情过于复杂,OOP并不意味着让它变得困难。建筑工人阶级有什么好处?如果您不能命名任何对象,那么只需在父类上使用
build()
toHTML()
方法。

您正在创建单独的对象并希望它们共享属性,这就是问题所在。如果将最后3行更改为此,代码将正常工作:

$build->addElement('input');
$build->addAttr('type','text');
echo $build->Builder();

虽然代码可以工作,但依我看,这并不是最好的方法。在继承时,一个很好的经验法则是问问自己:派生类可以被认为是它派生的类吗?换句话说,它是一个
Builder
一个
元素
,我不这么认为。对我来说,
Builder
将获取一个元素并构建HTML,因此我不会从
元素
派生
Builder

在这种情况下,继承的一个很好的例子是使用基本
元素
类,然后从中派生特定的元素,例如
TextInput
TextArea
RadioButton
。这些元素中的每一个都可以被视为
元素
,因此是继承的好选择


注意不要使事情过于复杂,OOP并不意味着让它变得困难。建筑工人阶级有什么好处?如果您不能命名任何代码,则只需在父类上使用
build()
toHTML()
方法。

更改代码,如下所示

$build->addElement('input');
$build->addAttr('type','text');
而不是

$attr->addElement('input');
$attr->addAttr('type','text');

谢谢

如下图所示更改您的代码

$build->addElement('input');
$build->addAttr('type','text');
而不是

$attr->addElement('input');
$attr->addAttr('type','text');

谢谢

“它不工作”从来都不是一个好的问题描述。发生了什么或没有发生什么?你在一个对象上调用
addElement
addAttr
,在另一个对象上调用
Builder
。问题是它显示了<,但必须是这样,Builder类不工作,this->getElement()和$this->getAttr()“它不工作”从来都不是一个好的问题描述。发生了什么或没有发生什么?您在一个对象上调用
addElement
addAttr
,在另一个对象上调用
Builder
。问题是它显示了<,但必须是这样,Builder类不能工作,this->getElement()和$this->getAttr()@BasDL将此答案标记为已接受,那么,不管怎样,这是一个构建完整表单的好OOP吗?我收到了这个通知:未定义变量:C:\websites\..中的html。。。。。在线39@BasDL我已经编辑了答案并提供了更多信息。@MrCode,您的意思是生成方法应该在元素类中吗?这一切对我来说都是一种练习,所以欢迎提供提示@BasDL它可以在元素类中是的,但是有一个Builder类是可以的,只要您认为它是有益的。不过,由于我在回答中所说的,我不会从元素中派生生成器。在OOP中,并非所有类都需要扩展另一个类,只要在符合逻辑的情况下进行扩展即可。@BasDL将此答案标记为已接受。无论如何,这是构建完整表单的好OOP吗?我收到了这个通知:未定义变量:C:\websites\..中的html。。。。。在线39@BasDL我已经编辑了答案并提供了更多信息。@MrCode,您的意思是生成方法应该在元素类中吗?这一切对我来说都是一种练习,所以欢迎提供提示@BasDL它可以在元素类中是的,但是有一个Builder类是可以的,只要您认为它是有益的。不过,由于我在回答中所说的,我不会从元素中派生生成器。在OOP中,并非所有类都需要扩展另一个类,只要在符合逻辑的情况下进行扩展即可。