Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wywołanie klas w metodach
Forum PHP.pl > Forum > PHP > Object-oriented programming
lord_borsuk
Witam
Przeglądając ostatnio dokumentacje frameworków zauważyłem ze tam obiekty są używane z poziomu metod klas do których te obiekty nie zostały w żaden sposób przekazane, i moje pytanie brzmi jak coś takiego się robi ??
Wiem ze to średnio określiłem problem, ale nie mam bladego pojęcia jak to inaczej opisać ponieważ dopiero zaczynam z OOP, i trochę brakuje mi języka.
Umiem korzystać z google, ale nie wiem czego szukać, więc jak byście mogli mi podsunąć coś co by mnie naprowadziło mnie na rozwiązanie problemu był bym bardzo wdzięczny.
Crozin
Mógłbyś pokazać jakiś przykładowy kod?
smentek
Kosmici i czarna magia... Obiekty "używane z poziomu metod klas do których te obiekty nie zostały w żaden sposób przekazane" zostały przekazane w obiektach bazowych po które opisywane obiekty dziedziczą.
  1. class A
  2. {
  3. protected $x;
  4. public function setX( $x )
  5. {
  6. $this->x = $x;
  7. }
  8.  
  9. public abstract sendToAnotherDimension( $z );
  10.  
  11. public function blackMagic()
  12. {
  13. $this->sendToAnotherDimension( 'Agent Mulder z archiwum ' );
  14. }
  15.  
  16. }
  17.  
  18. class B extends A
  19. {
  20. /**
  21.   * Metoda frameworka (np kontroler) Klasy A wogole nie widzisz bo jest
  22.   * ona ukryta w bebechach systemu...
  23.   * @param string $caramba
  24.   */
  25. public function sendToAnotherDimension( $caramba )
  26. {
  27.  
  28. //$x jest tutaj dostepny z powietrza (na pierwszy rzut oka)
  29. echo $caramba . $this->x;
  30. }
  31. }
  32.  
  33. $b = new B();
  34. $b->setX('X');
  35. $b->blackMagic();
  36.  
LBO
klasa B dziedziczy x i setX z klasy A - tutaj wszystko jest w porządku.

Natomiast to, że w A nie ma zadeklarowanej metody sendToAnotherDimention (chociażby abstrakcyjnej) to już niedbalstwo programisty, niestety parser PHP nie uzna tego za błąd.
W momencie kiedy wywołujesz blackMagic jako metodę na instancji klasy B to sendToAnotherDimention() już tam jest.
smentek
True.
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.