Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Problem z chroniona funkcja w klasie
Forum PHP.pl > Forum > Przedszkole
uki8877
Witam

Mam nadzieje ,ze to ostatnie pytanie na dzis smile.gif

chce utworzyc funkcje ktora bedzie mi zwracac kilka linijek kodu:

  1. protected function domDOC() {
  2. libxml_use_internal_errors(true);
  3. $dom = new DOMDocument;
  4. $dom->loadHTML($this->getHighscore());
  5. $domXPath = new DomXPath($dom);
  6.  
  7. }

no i tu mam problem bo nie wychodzi mi to

probowalem tak:

  1. protected function domDOC() {
  2. libxml_use_internal_errors(true);
  3. $dom = new DOMDocument;
  4. $dom->loadHTML($this->getHTML());
  5. $domXPath = new DomXPath($dom);
  6.  
  7. return $this->domDOC();
  8.  
  9. }


Jednak to nie dziala. Natomiast gdy ten kod wkleje "normalnie' to wszystko dziala

czyli np w klasie count taki kod nie zadziala :

  1. public function count() {
  2. $this->domDOC();
  3.  
  4. return $dom->getElementsByTagName('option')->length;
  5. }


a taki zadziała:


  1. public function count() {
  2. libxml_use_internal_errors(true);
  3. $dom = new DOMDocument;
  4. $dom->loadHTML($this->getHTML());
  5. $domXPath = new DomXPath($dom);
  6.  
  7. return $dom->getElementsByTagName('option')->length;
  8. }


Bede wdzieczny za porady jak to usprawnic smile.gif
Tomplus
Nie przedstawiłeś nam pełni klasy, ale czy nie mylisz sobie protected z private?
uki8877
W tym przypadku nie ma to znaczenia ponieważ do funkcji odwołuje się tylko wewnątrz klasy, nie poza nią
CuteOne
  1. protected function getDOMDocument() {
  2. libxml_use_internal_errors(true);
  3. $dom = new DOMDocument;
  4. $dom->loadHTML($this->getHTML());
  5.  
  6. return $dom;
  7. }
  8.  
  9. protected function getDomXPath(\DOMDocument $dom) {
  10. return new DomXPath($dom);
  11. }
  12.  
  13. public function count($string) {
  14. $dom = $this->getDOMDocument();
  15.  
  16. return $dom->getElementsByTagName('option')->length;
  17. }


Tylko, że to całkowicie bezsensu wink.gif za każdym razem gdy będziesz chciał coś zrobić stworzysz nową instancję DOMDocument. Przemyśl to jeszcze smile.gif
uki8877
@CuteOne

Skoro uwazasz ze to bez sensu to nie mam zamiaru polemizować :-)

W takim razie może podpowiesz jak byś rozwiązał ten problem ?
Tomplus
stwórz sobie metodę która będzie inicjować w twoim wypadku najlepiej w konstruktorze.
uki8877
czyli to co podal CuteOne ? ->

  1. public function __construct() {
  2.  
  3. protected function getDOMDocument() {
  4.  
  5. libxml_use_internal_errors(true);
  6. $dom = new DOMDocument;
  7. $dom->loadHTML($this->getHTML());
  8.  
  9. return $dom;
  10.  
  11. }
  12.  
  13. protected function getDomXPath(\DOMDocument $dom) {
  14.  
  15. return new DomXPath($dom);
  16.  
  17. }
  18. }
IProSoft
Cóż za stworek, chyba podstawy się kłaniają...

W konstruktorze powinieneś zadeklarować argument DOMDocument, który później możesz wielokrotnie wykorzystać bez potrzeby ładowania na nowo.

Podaję Ci tylko przykład, nie rozwiązanie.
  1. public $dom;
  2.  
  3. public function __construct()
  4. {
  5. $this->dom = $this->getDOMDocument();
  6. }
  7.  
  8. protected function getDOMDocument()
  9. {
  10. libxml_use_internal_errors( true );
  11. $dom = new DOMDocument;
  12. $dom->loadHTML( $this->getHTML() );
  13.  
  14. return $dom;
  15. }
  16.  
  17. protected function getDomXPath( \DOMDocument $dom )
  18. {
  19. return new DomXPath( $dom );
  20. }
  21.  
  22. public function count($string)
  23. {
  24. return $this->dom->getElementsByTagName('option')->length;
  25. }
uki8877
Cytat(IProSoft @ 1.05.2016, 10:04:10 ) *
Cóż za stworek, chyba podstawy się kłaniają...

W konstruktorze powinieneś zadeklarować argument DOMDocument, który później możesz wielokrotnie wykorzystać bez potrzeby ładowania na nowo.

Podaję Ci tylko przykład, nie rozwiązanie.
  1. public $dom;
  2.  
  3. public function __construct()
  4. {
  5. $this->dom = $this->getDOMDocument();
  6. }
  7.  
  8. protected function getDOMDocument()
  9. {
  10. libxml_use_internal_errors( true );
  11. $dom = new DOMDocument;
  12. $dom->loadHTML( $this->getHTML() );
  13.  
  14. return $dom;
  15. }
  16.  
  17. protected function getDomXPath( \DOMDocument $dom )
  18. {
  19. return new DomXPath( $dom );
  20. }
  21.  
  22. public function count($string)
  23. {
  24. return $this->dom->getElementsByTagName('option')->length;
  25. }


No klaniaja, klaniaja smile.gif ale będę się uczył dalej, dzięki :-)
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.