Menu
Coddy logo textTech

Wprowadzenie do interfejsów

Część sekcji Programowanie obiektowe ścieżki PHP w Coddy. Lekcja 27 z 91.

Interfejs definiuje kontrakt, którego muszą przestrzegać klasy. W przeciwieństwie do klas abstrakcyjnych, które mogą zawierać zarówno metody abstrakcyjne, jak i konkretne, interfejs jedynie deklaruje sygnatury metod bez ich implementacji. Pomyśl o nim jak o obietnicy: każda klasa implementująca interfejs gwarantuje, że udostępni określone metody.

Definiujesz interfejs za pomocą słowa kluczowego interface:

<?php
interface Printable {
    public function print();
}

Ten interfejs deklaruje, że każda klasa implementująca Printable musi mieć metodę print(). Interfejs nie dba o to, jak działa ta metoda, a jedynie o to, by istniała.

Oto prosty przykład pokazujący podstawową strukturę:

<?php
interface Drivable {
    public function start();
    public function stop();
}

Zwróć uwagę, że metody interfejsu nie mają treści, a jedynie sygnaturę zakończoną średnikiem. Wszystkie metody w interfejsie są niejawnie publiczne, więc nie możesz używać private ani protected.

Interfejsy są potężne, ponieważ pozwalają niezwiązanym ze sobą klasom współdzielić wspólne zachowanie. Car i Motorcycle mogą nie mieć ze sobą nic wspólnego pod względem dziedziczenia, ale obie mogą implementować Drivable, aby zagwarantować, że mają metody start() i stop().

Najważniejsza kwestia: Interfejs definiuje, jakie metody musi mieć klasa, a nie jak powinny działać. Ustanawia kontrakt, który muszą spełniać klasy implementujące ten interfejs.

challenge icon

Wyzwanie

Łatwy

Zbudujmy prosty system wiadomości, który wprowadzi Cię w interfejsy. Zdefiniujesz interfejs określający kontrakt dotyczący obsługi wiadomości, tworząc podstawę dla klas implementujących, które utworzysz w następnej lekcji.

Rozmieścisz kod w dwóch plikach:

  • Messageable.php: Zdefiniuj interfejs o nazwie Messageable, który deklaruje sygnatury dwóch metod: compose($content) do tworzenia wiadomości oraz deliver() do jej wysyłania. Pamiętaj, że metody interfejsu nie mają ciała — zawierają tylko sygnaturę zakończoną średnikiem.
  • main.php: Dołącz plik Messageable. Aby sprawdzić, czy interfejs jest poprawnie zdefiniowany, użyj funkcji PHP interface_exists(), by sprawdzić, czy istnieje Messageable. Następnie użyj ReflectionClass, aby sprawdzić interfejs i wyświetlić jego metody. Utwórz obiekt refleksji interfejsu, pobierz jego metody za pomocą getMethods() (która zwraca obiekty ReflectionMethod) i wyświetl nazwę każdej metody za pomocą getName(), każdą w osobnym wierszu.

Wynik powinien wyświetlać nazwy dwóch metod zadeklarowanych w interfejsie, każdą w osobnym wierszu, w kolejności, w jakiej je zdefiniowano.

To wyzwanie skupia się wyłącznie na definiowaniu interfejsu: kontraktu, który będą musiały spełniać przyszłe klasy. Określasz, jakie metody muszą istnieć, nie martwiąc się o to, jak będą działać. Implementacją zajmiesz się w następnej lekcji!

Spróbuj swoich sił

<?php
// Dołącz plik interfejsu Messageable
require_once 'Messageable.php';

// TODO: Użyj interface_exists(), aby sprawdzić, czy interfejs Messageable istnieje

// TODO: Utwórz obiekt ReflectionClass dla interfejsu Messageable

// TODO: Pobierz metody za pomocą getMethods()

// TODO: Przejdź przez metody i wypisz nazwę każdej z nich w osobnym wierszu

?>
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Programowanie obiektowe

Poćwicz samodzielnie: Kompilator PHP online