[php] PHP5 # interface

0

Czytałam troche na forum, czytałam troche w książce i ani z książki ani z forum nie zrozumiałam zabardzo.
Po co jest implementować do klasy interface skoro i tak faktyczne ciało metody dopiero w klasie jest, nie umiem tego pojąć choć juz ktos na jednym forumie na autach to demonstrował i ja dalej niczewo, moze dlatego ze mnie auta nie kręcą ;-) no tak czy siak nie łapie. I zastanawiam się czy moze po to jest interface bo może z wywołanych jednozesnie klas mozna pozbierac metody i np bez dziedziczenia po klasie z innej klasy wziąć metode, prosze oświećcie blondi [diabel]

0

Interfejsy jest w celu narzucenia definiowania funkcji. Implementując interfejs musisz w klasie go implementującej utworzyć funkcje takie jakie interfejs definiuje. Przykład: interfejs bazy danych zawiera abstrakcyjne funkcje: Query, NumRows. W klasie w której zaimplementujesz ten interfejs tez musisz utworzyć takie funkcje które będęą realizowały już konkretne zadania. Interfejs jest jakby szablonem na podstawie kórego tworzysz klasy.

Przykład wizualny:
Jakaś strona może korzystać z różnych baz danych np. MySQL i postgreSQL. Są napisane 2 klasy do obsługi tych baz. Skrypt niezależnie od dołączonej klasy wywołuje następujące funkcje: Query, NumRows, Connect, Disconnect.

Klasa MySQL ma zdefiniowane wszystkie funkcje.
Klasa PostgreSQL nie ma zdefiniowanej funkcji Connect.

Z punktu widzenia projektowania klas wszystko jest poprawnie, ale po wybraniu klasy do obsługi PgSQL skrypt się krzaczy, bo nie widzi funkcji Connect tej klasy.

Po to jest interfejs - piszesz go i w jego założeniach dajesz wszystkie 4 funkcje:

interface db {
  public function Connect();
  public function Disconnect();
  public function Query();
  public function NumRows();
}

Teraz projektując klasy do obsługi baz danych implementujesz ten interfejs i jak nie napiszesz funkcji zdefiniowanej w tym interfejsie nastąpi błąd skryptu że klasa nie implementuje jakiejś funkcji. Masz dzięki temu pewność że budowane klasy w oparciu o ten interfejs będą miały wszystkie założone przez Ciebie funckje które skrypt wykorzystuje (wymagane minimum) - bo klasy mogą zawierać jeszcze dodatkowe funkcje, ale bez tych klasa nie jest poprawna.

Klasa:

class mysql implements db {
  public function Connect(){
  }
  public function Disconnect(){
  }
  public function Query(){
  }
  public function NumRows(){
  }

  public function DODATKOWA(){
  }
}

spełni wymogi, ale gdyby nie miała np. funkcji Query() automatycznie nie spełnia wymogów "szablonu" jakim jest interfejs i nie można z niej korzystać - skrypt nie będzie nawet próbował z niej korzystać co daje na dzień dobry weryfikację czy klasa ma wszystkie potrzebne do komunikacji funkcje.

Interfejs może definiować tylko abstrakcyjne funkcje, nie może definiować pól klasy (zmiennych klasy).

0

oooo teraz już rozumiem :) dzięki wielkie :)</image>

1 użytkowników online, w tym zalogowanych: 0, gości: 1