1

誰かが私を助けてくれることを願っています、私はoopスターターであり、以下のスクリプトは出力を提供します<が、私はこれが欲しいです<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();
4

2 に答える 2

1

個別のオブジェクトを作成し、それらがプロパティを共有することを期待しています。これが問題です。最後の 3 行を次のように変更すると、コードが機能します。

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

コードパッドのデモはこちら

コードは機能しますが、IMO はそれを行うための最良の方法ではありません。継承するときの良い経験則は、自問自答することです: 派生クラスは、派生元のクラスと見なすことができますか? 言い換えればBuilderElement私はそうではないと思います。私にとって、 aBuilderは要素を取り、HTML を構築するので、から派生BuilderしませんElement

この場合の継承の良い例は、基本クラスを持ち、そこから、、Elementなどの特定の要素を派生させることです。これらはそれぞれ と見なすことができるため、継承に適しています。TextInputTextAreaRadioButtonElement

物事を複雑にしすぎないように注意してください。OOP はそれを難し​​くするという意味ではありません。Builder クラスにはどのような利点がありますか? 名前を付けられない場合は、親クラスでbuild()orメソッドを使用してください。toHTML()

于 2012-11-09T09:50:20.780 に答える
0

以下に示すようにコードを変更します

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

それ以外の

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

ありがとう

于 2012-11-09T09:51:36.253 に答える