Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Parametry metod w interfejsach, uniknięcie wymuszania konkretnych parametrów w metodach
Speedy
post
Post #1





Grupa: Zarejestrowani
Postów: 651
Pomógł: 28
Dołączył: 4.12.2004

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


hej, próbuję okiełznać częściowo php5 (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif) i mam takie pytanie:

Czy da się w jakiś sposób implementować interfejs w danej klasie, ale tak, aby w tej klasie były wymagane tylko konkretne metody, które zawiera interfejs i żeby nie była wymuszana konkretna ilość argumentów dla tych metod? Wiadomo, że interfejsy wymagają utworzenia w klasie konkretnych metod z konkretną ilością parametrów. Ja chciałbym natomiast mieć taki interfejs, który będzie wymagał tylko tego, żeby w klasie znajdowały się metody o konkretnych nazwach, ale w różnych implementacjach będą one miały różną liczbę argumentów. Da się coś takiego zrobić?

Po prostu mam kilka klas, które mają takie same schematy nazewnictwa metod, ale czasami w niektórych metodach jest potrzeba podania większej ilości argumentów niż w innych klasach. Można to oczywiście uwzględnić w interfejsie i dodać parametry do wszystkich metod, ale wtedy te dodane parametry będą w niektórych miejscach w ogóle niewykorzystywane...
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Prph
post
Post #2





Grupa: Zarejestrowani
Postów: 338
Pomógł: 2
Dołączył: 4.03.2006
Skąd: Łódź

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


O widze MVC (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)

Ktos kiedys mądrze zauważym na naszym forum, ze model nie powinien implementowac czegokolwiek.
Pozniej padlo zdanie, ze model to chyba najtrudniejsza czesc MVC.

Zgadzam sie z pierwszym stwierdzeniem. Dlaczego? Bo tylko ty wiesz jak uzywac modelu, nie aplikacja.

Dwa modele (np GaleriaZdjec i Nowosci) moga byc tak rozne i zawierac tak rozne metody, ze interfejs jest tu absolutnie niepotrzebny. Co innego taka sytuacja:

  1. <?php
  2. class News_Model_MySQL implements News_Model
  3. {
  4. public function add($title, $body)
  5. {
  6. // wstaw do mysql
  7. }
  8. }
  9.  
  10. class News_Model_Postgres implements News_Model
  11. {
  12. public function add($title, $body)
  13. {
  14. // wstaw do postgres
  15. }
  16. }
  17. ?>


Masz dwa takie same modele, ale operujace na roznych zrodlach danych. Wtedy moznaby uzyc interfejsu, ale ja pozostaje przy stwierdzeniu, ze nadal nie ma to sensu (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)

RADA: model nie implementuje niczego.
RADA2: mozesz dla ulatwienia dziedziczcy po jakims prostym modelu otwierajacym Ci dostep do zrodla danych:

  1. <?php
  2. abstract class MySQL_Model
  3. {
  4. private $oDB;
  5.  
  6. public function __construct()
  7. {
  8. $this->oDB = new Moja_Baza_Danych;
  9. }
  10.  
  11. private function getDB()
  12. {
  13. return $this->oDB;
  14. }
  15. }
  16.  
  17.  
  18. class Moj_Nowy_Model estends MySQL_Model
  19. {
  20. public function dodajNowosc($tresc, $tytul)
  21. {
  22. $this->getDB()->query(/*ble ble*/);
  23. }
  24. }
  25. ?>


Pozdrawiam, Adrian.
Go to the top of the page
+Quote Post

Posty w temacie


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: 4.10.2025 - 22:28