我希望有人可以帮助我,我是oop starter,下面的脚本提供了输出<
,但我想要<input type="text">
。
现在我创建了一个Build类但它不起作用。我做错了什么以及如何解决这个问题? 有人能帮助我吗? Thnks!
//set get Element
class Element {
private $_element;
function addElement($element) {
$this->_element = $element;
}
function getElement(){
return $this->_element;
}
}
//add and set Atrr
class attrType extends Element {
//set var
public $_attrType;
function __construct(){
$this->_attrType = array();
}
function addAttr($attrType, $attrValue){
$this->_attrType[$attrType] = $attrValue;
}
function getAttr(){
return $this->_attrType;
}
}
//build input text field
class Build extends attrType {
function Builder() {
$html .= "<";
$html .= ''.$this->getElement();
foreach( $this->getAttr() as $key => $value){
$html .= " $key=";
$html .= "\"$value\">";
}
return $html;
}
}
$element = new Element();
$attr = new attrType();
$build = new Build();
$attr->addElement('input');
$attr->addAttr('type','text');
echo $build->Builder();
答案 0 :(得分:1)
您正在创建单独的对象并期望它们共享属性,这就是问题所在。如果您将最后3行更改为此行,您的代码将起作用:
$build->addElement('input');
$build->addAttr('type','text');
echo $build->Builder();
尽管代码有效,但IMO并不是最好的方法。在继承时,一个好的经验法则是问自己:派生类可以被认为是它派生的类吗?换句话说是Builder
和Element
,我认为不是。对我而言,Builder
会占用一个元素并构建HTML,因此我不会从Builder
派生Element
。
在这种情况下,继承的一个很好的例子就是拥有基础Element
类,然后从中派生特定元素,例如TextInput
,TextArea
,RadioButton
。每个都可以被认为是Element
,因此是继承的好选择。
小心不要过分复杂化,OOP并不意味着让它变得困难。 Builder类有什么好处?如果您无法命名,则只需在父类上使用build()
或toHTML()
方法。
答案 1 :(得分:0)
更改您的代码,如下所示
$build->addElement('input');
$build->addAttr('type','text');
而不是
$attr->addElement('input');
$attr->addAttr('type','text');
由于