Poznajemy czym są interfejsy w obiektówce PHP, jak je stworzyć i zaimplementować wewnątrz klasy. Do dzieła.
Interfejs to inaczej kontrakt. Pokazuje jakie metody musi posiadać klasa, która go implementuje. Ponadto, razem ze strict types może określać, co metody mogą przyjmować i co mają zwracać.
Przykład z Githuba:
<?php
declare(strict_types=1);
interface RuleInterface
{
public function validate(array $data, string $field, array $params): bool;
public function getMessage(array $data, string $field, array $params): string;
}
Interfejs implementujemy słówkiem kluczowym „implements”. Wtedy nasza klasa jest zobligowana do posiadania metod, jakie nakreślił interfejs:
<?php
declare(strict_types=1);
interface RuleInterface
{
public function validate(array $data, string $field, array $params): bool;
public function getMessage(array $data, string $field, array $params): string;
}
class UrlRule implements RuleInterface
{
public function validate(array $data, string $field, array $params): bool
{
return (bool) filter_var($data[$field], FILTER_VALIDATE_URL);
}
public function getMessage(array $data, string $field, array $params): string
{
return "Invalid URL";
}
}
Interfejs nie zawiera implementacji metod (logiki, ciała funkcji). Nazywany jest kontraktem i jest to dobra analogia.
Jeżeli na przykład otrzymam kontrakt na napisanie aplikacji webowej, to nie dostanę kodu, który mam napisać, dostanę natomiast jakieś wytyczne, jak to się ma nazywać, co przyjmować i co zwracać.
Podobnie jest z interfejsami, nazywanymi też kontraktami.