PHPDevs

Projekt obiektowy z Composerem i Twigiem? Czytaj!

Programowanie obiektowe > Lekcja 8

Interfejsy

Interfejsy służą nam do określenia, jakie metody muszą zostać zaimplementowane (inaczej mówiąc stworzone) w klasie. Interfejs może zawierać jedynie deklaracje metod, bez ich ciał. Interfejs deklarujemy podobnie jak klasę, lecz przy użyciu słowa kluczowego interface.

<?php

interface PersonInterface
{
    public function getName(): string;
    public function getAddress(): string;
}

Z kolei aby zaimplementować taki interfejs dla danej klasy używamy implements.

<?php

class Person implements PersonInterface
{
    public function getName(): string
    {
        return 'Jan Kowalski';
    }

    public function getAddress(): string
    {
        return 'Długa 1, Warszawa';
    }
}

Oczywiście każda metoda musi zgadzać się z jej deklaracją. W innym przypadku otrzymamy odpowiedni błąd, na przykład:

Fatal error: Declaration of Person::getName() must be compatible with PersonInterface::getName(): string in ...

Warto wspomnieć, że możemy implementować wiele interfejsów dla jednej klasy. Jest to pewna przewaga w stosunku klas abstrakcyjnych, gdzie możemy odziedziczyć tylko jedną klasę.

<?php

interface PersonInterface
{
    public function getName(): string;
    public function getAddress(): string;
}

interface UserInterface
{
    public function getLogin(): string;
}

class Person implements PersonInterface, UserInterface
{
    public function getName(): string
    {
        return 'Jan Kowalski';
    }

    public function getAddress(): string
    {
        return 'Długa 1, Warszawa';
    }

    public function getLogin(): string
    {
        return 'jkowalski';
    }
}

Dziedziczenie

Znasz już mechanizm dziedziczenia. Podobnie jak klasy, tak interfejsy mogą dziedziczyć po sobie.

<?php

interface PersonInterface
{
    public function getName(): string;
    public function getAddress(): string;
}

interface UserInterface extends PersonInterface
{
    public function getName();
    public function getLogin(): string;
}

class Person implements UserInterface
{
    public function getName()
    {
        return 'Jan Kowalski';
    }

    public function getAddress(): string
    {
        return 'Długa 1, Warszawa';
    }

    public function getLogin(): string
    {
        return 'jkowalski';
    }
}

W takim przypadku deklaracja metody getName jest nadpisywana.

Poprzednia lekcja Następna lekcja

Udostępnij

  • Facebook
  • Twitter
  • Google+

Komentarze