Я пытаюсь расширить два собственных класса PHP5 (DOMDocument и DOMNode), чтобы реализовать 2 метода (selectNodes и selectSingleNode), чтобы упростить запросы XPath. Я думал, что это будет довольно просто, но я застрял в проблеме, которая, я думаю, является проблемой для начинающих ООП.
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);
}
}
Затем я попытался расширить DOMNode для реализации тех же методов, чтобы я мог выполнять запрос XPath непосредственно на узле:
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);
}
}
Теперь, если я выполню следующий код (для произвольного XMLDocument):
$xmlDoc = new nDOMDocument;
$xmlDoc->loadXML(...some XML...);
$node1 = $xmlDoc->selectSingleNode("//item[@id=2]");
$node2 = $node1->selectSingleNode("firstname");
Третья строка работает и возвращает объект DOMNode $ node1. Однако четвертая строка не работает, потому что метод selectSingleNode принадлежит классу nDOMNode, а не DOMNode.
Итак, мой вопрос: есть ли способ в какой-то момент "преобразовать" возвращенный объект DOMNode в объект nDOMNode? Я чувствую, что упускаю какой-то важный момент, и буду очень признателен за вашу помощь.
(Извините, это переформулировка моего вопроса Расширение DOMDocument и DOMNode: проблема с возвращаемым объектом )