0Pricing
PHP Academy · Lekcja

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

  1. Rozszerzanie klas za pomocą dziedziczenia
  2. Klasy i metody abstrakcyjne
  3. Implementowanie interfejsów
  4. Cechy do ponownego użycia kodu
← Powrót do PHP Academy