没有得到输入字段OOP类

时间:2012-11-09 09:42:11

标签: php input-field

我希望有人可以帮助我,我是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();

2 个答案:

答案 0 :(得分:1)

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

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

Codepad demo here

尽管代码有效,但IMO并不是最好的方法。在继承时,一个好的经验法则是问自己:派生类可以被认为是它派生的类吗?换句话说是BuilderElement,我认为不是。对我而言,Builder会占用一个元素并构建HTML,因此我不会从Builder派生Element

在这种情况下,继承的一个很好的例子就是拥有基础Element类,然后从中派生特定元素,例如TextInputTextAreaRadioButton。每个都可以被认为是Element,因此是继承的好选择。

小心不要过分复杂化,OOP并不意味着让它变得困难。 Builder类有什么好处?如果您无法命名,则只需在父类上使用build()toHTML()方法。

答案 1 :(得分:0)

更改您的代码,如下所示

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

而不是

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

由于