2010-04-04 25 views
4

我想擴展DOMDocument類,以便使XPath選擇更容易。我寫了這段代碼:擴展DOMDocument和DOMNode:返回對象的問題

class myDOMDocument extends DOMDocument { 

function selectNodes($xpath){ 
    $oxpath = new DOMXPath($this); 
    return $oxpath->query($xpath); 
    } 

    function selectSingleNode($xpath){ 
    return $this->selectNodes($xpath)->item(0); 
    } 
} 

這些方法分別返回一個DOMNodeList和一個DOMNode對象。 我現在想要做的是實現類似DOMNode對象的方法。但顯然,如果我編寫擴展DOMNode的類(myDOMNode),我將無法在由myDOMDocument返回的節點上使用這兩個額外的方法,因爲它們是DOMNode(而不是myDOMNode)對象。

我更喜歡對象編程的初學者,我嘗試了各種想法,但他們都導致了死衚衕。

任何提示?提前致謝。

回答

2

嘗試使用封裝而不是繼承。也就是說,不是編寫一個擴展本地DOMNode類的類,而是寫一個類在其中存儲DOMNode的一個實例,並且只提供你需要的方法。

這允許你寫一個構造函數,有效的把一個的DOMNode成MYNODE:

class MyNode { 
    function __construct($node) { 
     $this->node = $node; 
    } 

    // (other helpful methods) 

} 

爲類myDocument中,你輸出MYNODE對象,而不是的DOMNode對象:

class MyDocument { 

    // (other helpful methods) 

    function selectSingleNode($xpath) { 

     return new MyNode($this->selectNodes($xpath)->item(0)); 
    } 
} 
0

不知道我明白你在做什麼。可能你應該創建一些類myDOMXPath擴展了DOMXPath,它將返回我的*類的對象並在需要的地方使用它。