Genişletme DOMDocument ve DOMNode: dönüş nesne ile sorun

2 Cevap php

XPath seçimleri kolaylaştırmak amacıyla ben DOMDocument sınıfını genişletmek için çalışıyorum. Ben bu kod parçası yazdı:

class myDOMDocument extends DOMDocument {

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

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

These methods return a DOMNodeList and a DOMNode object, respectively. What I'd like to do now is to implement similar methods to the DOMNode objects. But obviously if I write a class (myDOMNode) that extends DOMNode, I won't be able to use these two extra methods on the nodes returned by myDOMDocument because they're DOMNode (and not myDOMNode) objects.

Ben daha çok nesne programlama bir acemi değilim, ben çeşitli fikirler denedim ama hepsi bir çıkmaz yol.

Herhangi bir ipucu? Şimdiden teşekkürler ederim.

2 Cevap

Encapsulation yerine devralma kullanmayı deneyin. Yani, bunun yerine yerli DOMNode sınıfını genişleten bir sınıf yazmanın, bir sınıf depolar içindeki DOMNode bir örneğini yazmak ve sadece ihtiyacınız yöntemleri sağlar.

Bu etkili bir MyNode içine DOMNode döner kurucu yazmanıza olanak sağlar:

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

   // (other helpful methods)

}

Sınıf benimDosya için çıktı MyNode yerine DOMNode nesnelerden daha nesneleri:

class MyDocument {

   // (other helpful methods)

   function selectSingleNode($xpath) {

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

Emin değilim ne yapıyorsun anlıyorum. Muhtemelen bazı sınıf myDOMXPath benim * sınıfların nesneleri geri dönmek ve gerektiğinde kullanmak hangi DOMXPath uzanır oluşturmanız gerekir.