Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Przekazywanie obiektu do metody
Forum PHP.pl > Forum > PHP > Object-oriented programming
batman
W PHP5 jest możliwość przekazania do metody obiektu:

  1. <?php
  2. class jakasKlasa
  3. {
  4. public function jakasMetoda(innaKlasa $obj) {
  5. }
  6. }
  7. ?>


Niestety nie wiem jaki obiekt będzie przekazywany do obiektu, więc powyższe rozwiązanie się nie sprawdzi. Moje obecne rozwiązanie wygląda mniej więcej tak:

  1. <?php
  2. class jakasKlasa
  3. {
  4. public function jakasMetoda($obj) {
  5. if(!is_object($obj)) throw new Exception("tresc komunikatu");
  6. }
  7. }
  8. ?>


Czy jest możliwość przekazywania do metody dowolnego obiektu z wymuszeniem typu jak w pierwszym przypadku?

Jedyne co przychodzi mi do głowy, to utworzenie abstrakcyjnej klasy, po której będą dziedziczyć wszystkie klasy, które będą przekazywane do metody.
Cysiaczek
Stwórz interface - Klasa implementująca interfejs zyskuje dodatkowy typ, który możesz wymusić.
batman
W zasadzie działa tak samo jak klasa abstrakcyjna. Niemniej jednak dzięki za odpowiedź. Interface wydaje się być lepszym rozwiązaniem niż klasa abstrakcyjna.
Cysiaczek
Jest o tyle lepszy, że możesz stworzyć kolekcję niepowiązanych klas, ale lepiej zobacz, czy faktycznie abstrakcja się nie nada... bo ma większe możliwości : )
batman
W tym przypadku klasa abstrakcyjna się nie przyda, ponieważ mam wiele klas, które nie mają ze sobą nic wspólnego. Jedyne co je łączy, to fakt, że są przekazywane go innej klasy. Interface tutaj jest bardzo dobrym rozwiązaniem.
dr_bonzo
Cytat
mam wiele klas, które nie mają ze sobą nic wspólnego. Jedyne co je łączy, to fakt, że są przekazywane go innej klasy.

Jesli nie maja ze soba nic wspolnego to czenu sa przekazywane temu samemu obiektowi?

Co konkretnie robi ta metoda?
batman
Klasy przekazywane do metody wyciągają różne dane i w różny sposób je zwracają. Czasami jest to array, czasami XML, innym razem bool, itd. Klasa odbierająca te dane, na podstawie ich typu, tworzy graficzną reprezentację tych danych. Może to być tabela HTML, treść e-maila, komunikat JavaScriptu. Wygląd generowany jest przy pomocy pomocniczych klas, np renderHTMLtable. Dzięki temu w klasie odbierającej dane nie mam śmietnika, a w plikach wyświetlających dane użytkownikowi (widoku) nie muszę za każdym razem zastanawiać się jakiej klasy użyć. Wygoda przede wszystkim winksmiley.jpg
mysz
Czyli jednak klasy te są dość mocno powiązane, i wg mnie powinien być tu interfejs. Do tego on służy...
batman
Jedyne co te klasy mają wspólnego, to to, że zwracają dane tongue.gif Zastosowałem interface i uzyskałem pożądany efekt.
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.