PHP Academy · Lektion

Implementering af interfaces

Definér kontrakter med interface, og implementér dem i flere klasser.

Lektion 3 af 413 trin

Implementering af interfaces er en gratis PHP Academy-lektion på CoddyKit. Dette er lektion 3 af 4. Du kan læse hele lektionen gratis nedenfor — og derefter øve dig praktisk i browseren med en indbygget kodeeditor og en AI-vejleder, der er tilgængelig døgnet rundt. Den er en del af læringsforløbet i PHP Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. PHP Academy-kurset indeholder 4 lektioner i alt.

Introduktion: Grænseflader i PHP

En grænseflade definerer en kontrakt: en liste over metodesignaturer, som implementerende klasser skal stille til rådighed. I modsætning til abstrakte klasser kan en klasse implementere flere grænseflader.

Nøglebegreber

Vigtige begreber:

  • Erklær med interface Name {}
  • Metoder har ingen krop – kun signaturer
  • Implementér med implements InterfaceName
  • En klasse kan implementere flere grænseflader

Definition af en grænseflade

Eksempel:

<?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}"; }
}

Grænseflade som type

Fortsat:

<?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;
}

Konstanter i grænseflader

Større fordybelse:

<?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() => []);

Grænseflade, der udvider en grænseflade

Praktisk brug:

<?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 { }
}

Afhængighedsinjektion med grænseflader

Avanceret:

<?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.');
    }
}

Mønster

Almindelige mønstre for PHP-grænseflader bruges til at løse tilbagevendende problemer med programudformning på en enkel måde. Brug dem konsekvent for at få læsbar og vedligeholdelsesvenlig kode.

Hvornår det skal bruges

At vide, hvornår du skal bruge PHP-grænseflader, er lige så vigtigt som at vide hvordan. Overforbrug fører til kompleksitet; underforbrug fører til duplikering.

Eksempel fra virkeligheden

I virkelige applikationer forekommer PHP-grænseflader ofte i rammeværker, ORM'er og tjenestelag. At forstå dem forbereder dig på at bidrage til professionelle PHP-projekter.

Almindelige faldgruber

Undgå disse fejl med PHP-grænseflader:

  • Klasser kan implementere flere grænseflader, men kun udvide én klasse
  • Grænseflader kan ikke have egenskaber eller metodekroppe (bortset fra standardimplementeringer i PHP 8)
  • Programmér altid mod en grænseflade (abstrakt type), ikke en implementering
  • Brug grænseflader til at muliggøre afhængighedsinjektion og mockning i tests

Hurtig kontrol

Hvor mange grænseflader kan en PHP-klasse implementere på én gang?

Opsummering: Grænseflader i PHP

Opsummering:

  • Klasser kan implementere flere grænseflader, men kun udvide én klasse
  • Grænseflader kan ikke have egenskaber eller metodekroppe (bortset fra standardimplementeringer i PHP 8)
  • Programmér altid mod en grænseflade (abstrakt type), ikke en implementering
  • Brug grænseflader til at muliggøre afhængighedsinjektion og mockning i tests
Gratis at komme i gang

Lær PHP med en AI-underviser — gratis

Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.

Kurser
49
Lektioner
195

Ofte stillede spørgsmål

Er lektionen “Implementering af interfaces” gratis?

Ja — hele teksten til “Implementering af interfaces” kan læses gratis her på nettet. Hvis du vil øve dig interaktivt med en indbygget kodeeditor og en AI-vejleder døgnet rundt og få adgang til resten af PHP Academy-kurset, skal du opgradere til CoddyKit PRO. PHP Academy-kurset indeholder 4 lektioner i alt.

Hvad lærer jeg i “Implementering af interfaces”?

Definér kontrakter med interface, og implementér dem i flere klasser. Du øver dig i PHP Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.

Skal jeg have erfaring for at begynde på PHP Academy?

Der kræves ingen tidligere erfaring. PHP Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 3 af 4.

Hvor lang tid tager lektionen “Implementering af interfaces”?

De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.

Kan jeg skrive og køre kode i denne PHP Academy-lektion?

Ja. Alle PHP Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.

Alle lektioner i dette kursus

  1. Udvidelse af klasser med nedarvning
  2. Abstrakte klasser og metoder
  3. Implementering af interfaces
  4. Traits til genbrug af kode
← Tilbage til PHP Academy