2012-11-09 132 views
1

我希望有人可以幫助我,我是oop啓動器,下面的腳本給出輸出<但我想這<input type="text">沒有得到輸入字段OOP類

現在我創建了一個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

「它不工作」 從來都不是一個很好的問題描述。發生了什麼或沒有發生? –

+0

您正在對一個對象調用'addElement'和'addAttr',並在另一個對象上調用'Builder'。 – air4x

+0

問題是它顯示<但必須是所以構建器類不工作,this-> getElement()和$ this-> getAttr() – Bas

回答

0

更改您的代碼如下所示

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

,而不是

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

感謝

1

你正在創建單獨的對象,並期望他們分享的特性,這就是問題所在。如果你改變你的最後3行這一點,你的代碼將工作:

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

Codepad demo here

雖然代碼工作,國際海事組織它不是做到這一點的最好辦法。當繼承時,一個好的經驗法則是問自己:派生類可以被認爲是它派生出來的類嗎?換句話說就是BuilderElement,我不認爲它是。對我而言,Builder會帶上一個元素並構建HTML,所以我不會從Element派生Builder

繼承在這種情況下,一個很好的例子是有你的基地Element類,則能從中得到諸如TextInputTextAreaRadioButton特定元素。這些都可以被認爲是一個Element,因此將是繼承的一個很好的選擇。

小心不要過分複雜的東西太多,OOP並不意味着變得困難。 Builder類有什麼好處?如果您不能指定任何名稱,則只需在父類上使用build()toHTML()方法。

+0

它的工作原理!謝謝! – Bas

+0

@BasDL然後將此答案標記爲接受。 – aefxx

+0

無論如何,這是不錯的OOP來建立一個完整的表單嗎?我得到這個通知注意:未定義的變量:html中的C:\網站\ .....在線39 – Bas