Implementowanie interfejsów
Definiuj kontrakty za pomocą interface i implementuj je w wielu klasach
Implementowanie interfejsów to bezpłatna lekcja PHP Academy na CoddyKit. To lekcja 3 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej PHP Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs PHP Academy zawiera 4 lekcji w sumie.
Wprowadzenie: interfejsy PHP
Interfejs definiuje kontrakt: listę sygnatur metod, które muszą udostępnić klasy implementujące ten interfejs. W przeciwieństwie do klas abstrakcyjnych jedna klasa może implementować wiele interfejsów.
Najważniejsze pojęcia
Najważniejsze pojęcia:
- Deklaruje się go za pomocą
interface Name {} - Metody nie mają treści — zawierają wyłącznie sygnatury
- Implementuje się go za pomocą
implements InterfaceName - Klasa może implementować wiele interfejsów
Definiowanie interfejsu
Przykład:
<?php
interface Serializable {
public function serialize(): string;
public function unserialize(string $data): void;
}
interface Loggable {
public function toLog(): string;
}
// Implementing both interfaces:
class Event implements Serializable, Loggable {
public function __construct(private string $type, private string $data) {}
public function serialize(): string { return json_encode(['type'=>$this->type,'data'=>$this->data]); }
public function unserialize(string $d): void { $a = json_decode($d,true); $this->type=$a['type']; $this->data=$a['data']; }
public function toLog(): string { return "[{$this->type}] {$this->data}"; }
}Interfejs jako typ
Ciąg dalszy:
<?php
interface Cache {
public function get(string $key): mixed;
public function set(string $key, mixed $val, int $ttl = 0): void;
public function delete(string $key): void;
}
// Function accepts any Cache implementation:
function loadUser(int $id, Cache $cache): array {
$key = "user:$id";
$user = $cache->get($key);
if (!$user) {
$user = fetchFromDb($id);
$cache->set($key, $user, 3600);
}
return $user;
}Stałe interfejsu
Więcej szczegółów:
<?php
interface HttpMethods {
const GET = 'GET';
const POST = 'POST';
const PUT = 'PUT';
const DELETE = 'DELETE';
}
class Router implements HttpMethods {
public function addRoute(string $method, string $path, callable $handler): void {
// ...
}
}
$router = new Router();
$router->addRoute(HttpMethods::GET, '/users', fn() => []);Interfejs rozszerzający interfejs
Zastosowanie praktyczne:
<?php
interface Readable {
public function read(): string;
}
interface Writable {
public function write(string $data): void;
}
// Interface can extend multiple interfaces:
interface ReadWrite extends Readable, Writable {
public function seek(int $position): void;
}
class FileStream implements ReadWrite {
public function read(): string { return ''; }
public function write(string $d): void { }
public function seek(int $p): void { }
}Wstrzykiwanie zależności za pomocą interfejsów
Użycie zaawansowane:
<?php
interface MailerInterface {
public function send(string $to, string $subject, string $body): bool;
}
class SmtpMailer implements MailerInterface {
public function send(string $to, string $subject, string $body): bool {
// real SMTP send
return true;
}
}
class UserService {
public function __construct(private MailerInterface $mailer) {}
public function register(string $email): void {
// save user...
$this->mailer->send($email, 'Welcome!', 'Thanks for joining.');
}
}Wzorzec
Typowe wzorce wykorzystujące interfejsy PHP pomagają w przejrzysty sposób rozwiązywać powtarzające się problemy projektowe. Należy stosować je konsekwentnie, aby kod był czytelny i łatwy w utrzymaniu.
Kiedy stosować
Wiedza o tym, kiedy stosować interfejsy PHP, jest równie ważna jak wiedza o tym, jak to robić. Nadużywanie ich prowadzi do złożoności, a zbyt rzadkie stosowanie — do powielania kodu.
Przykład z praktyki
W rzeczywistych aplikacjach interfejsy PHP często występują we frameworkach, ORM-ach i warstwach usług. Ich zrozumienie przygotuje Państwa do pracy nad profesjonalnymi projektami PHP.
Typowe pułapki
Unikaj tych błędów związanych z interfejsami PHP:
- Klasy mogą implementować wiele interfejsów, ale mogą rozszerzać tylko jedną klasę
- Interfejsy nie mogą zawierać właściwości ani treści metod (z wyjątkiem domyślnej implementacji w PHP 8)
- Zawsze programuj zgodnie z interfejsem (typem abstrakcyjnym), a nie z implementacją
- Korzystaj z interfejsów, aby umożliwić wstrzykiwanie zależności i mockowanie w testach
Szybkie sprawdzenie
Ile interfejsów klasa PHP może jednocześnie implementować?
Podsumowanie: interfejsy PHP
Podsumowanie:
- Klasy mogą implementować wiele interfejsów, ale mogą rozszerzać tylko jedną klasę
- Interfejsy nie mogą zawierać właściwości ani treści metod (z wyjątkiem domyślnej implementacji w PHP 8)
- Zawsze programuj zgodnie z interfejsem (typem abstrakcyjnym), a nie z implementacją
- Korzystaj z interfejsów, aby umożliwić wstrzykiwanie zależności i mockowanie w testach
Często zadawane pytania
Czy lekcja „Implementowanie interfejsów” jest bezpłatna?
Tak — pełny tekst „Implementowanie interfejsów” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu PHP Academy, przejdź na CoddyKit PRO. Kurs PHP Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „Implementowanie interfejsów”?
Definiuj kontrakty za pomocą interface i implementuj je w wielu klasach Ćwiczysz PHP Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć PHP Academy?
Nie wymagamy żadnego doświadczenia. PHP Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 3 z 4.
Ile czasu zajmuje lekcja „Implementowanie interfejsów”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji PHP Academy?
Tak. Każda lekcja PHP Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Rozszerzanie klas za pomocą dziedziczenia
- Klasy i metody abstrakcyjne
- Implementowanie interfejsów
- Cechy do ponownego użycia kodu