Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Przekazywanie obiektu do metody
batman
post
Post #1





Grupa: Moderatorzy
Postów: 2 921
Pomógł: 269
Dołączył: 11.08.2005
Skąd: 127.0.0.1




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.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 8)
Cysiaczek
post
Post #2





Grupa: Moderatorzy
Postów: 4 465
Pomógł: 137
Dołączył: 26.03.2004
Skąd: Gorzów Wlkp.




Stwórz interface - Klasa implementująca interfejs zyskuje dodatkowy typ, który możesz wymusić.
Go to the top of the page
+Quote Post
batman
post
Post #3





Grupa: Moderatorzy
Postów: 2 921
Pomógł: 269
Dołączył: 11.08.2005
Skąd: 127.0.0.1




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.
Go to the top of the page
+Quote Post
Cysiaczek
post
Post #4





Grupa: Moderatorzy
Postów: 4 465
Pomógł: 137
Dołączył: 26.03.2004
Skąd: Gorzów Wlkp.




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 : )
Go to the top of the page
+Quote Post
batman
post
Post #5





Grupa: Moderatorzy
Postów: 2 921
Pomógł: 269
Dołączył: 11.08.2005
Skąd: 127.0.0.1




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.
Go to the top of the page
+Quote Post
dr_bonzo
post
Post #6





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

Ostrzeżenie: (0%)
-----


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?
Go to the top of the page
+Quote Post
batman
post
Post #7





Grupa: Moderatorzy
Postów: 2 921
Pomógł: 269
Dołączył: 11.08.2005
Skąd: 127.0.0.1




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 (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post
mysz
post
Post #8





Grupa: Zarejestrowani
Postów: 81
Pomógł: 0
Dołączył: 26.08.2006
Skąd: Szczecin

Ostrzeżenie: (0%)
-----


Czyli jednak klasy te są dość mocno powiązane, i wg mnie powinien być tu interfejs. Do tego on służy...
Go to the top of the page
+Quote Post
batman
post
Post #9





Grupa: Moderatorzy
Postów: 2 921
Pomógł: 269
Dołączył: 11.08.2005
Skąd: 127.0.0.1




Jedyne co te klasy mają wspólnego, to to, że zwracają dane (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif) Zastosowałem interface i uzyskałem pożądany efekt.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 23.12.2025 - 08:41