Programowanie obiektowe > Lekcja 8
Interfejsy
Dodano: 23-07-2017 12:00
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
Komentarze