PHP5 : Applying a method from an extended class on an object from the original (parent) class.
Posted
by Glauber Rocha
on Stack Overflow
See other posts from Stack Overflow
or by Glauber Rocha
Published on 2010-04-06T15:00:25Z
Indexed on
2010/04/06
15:03 UTC
Read the original article
Hit count: 408
Hello,
I'm trying to extend two native PHP5 classes (DOMDocument and DOMNode) to implement 2 methods (selectNodes and selectSingleNode) in order to make XPath queries easier. I thought it would be rather straighforward, but I'm stuck in a problem which I think is an OOP beginner's issue.
class nDOMDocument extends DOMDocument {
public function selectNodes($xpath){
$oxpath = new DOMXPath($this);
return $oxpath->query($xpath);
}
public function selectSingleNode($xpath){
return $this->selectNodes($xpath)->item(0);
}
}
Then I tried to do extend DOMNode to implement the same methods so I can perform an XPath query directly on a node:
class nDOMNode extends DOMNode {
public function selectNodes($xpath){
$oxpath = new DOMXPath($this->ownerDocument,$this);
return $oxpath->query($xpath);
}
public function selectSingleNode($xpath){
return $this->selectNodes($xpath)->item(0);
}
}
Now if I execute the following code (on an arbitrary XMLDocument):
$xmlDoc = new nDOMDocument;
$xmlDoc->loadXML(...some XML...);
$node1 = $xmlDoc->selectSingleNode("//item[@id=2]");
$node2 = $node1->selectSingleNode("firstname");
The third line works and returns a DOMNode object $node1. However, the fourth line doesn't work because the selectSingleNode method belongs to the nDOMNode class, not DOMNode. So my question: is there a way at some point to "transform" the returned DOMNode object into a nDOMNode object? I feel I'm missing some essential point here and I'd greatly appreciate your help.
(Sorry, this is a restatement of my question http://stackoverflow.com/questions/2573820/)
© Stack Overflow or respective owner