Implementering af interfaces
Definér kontrakter med interface, og implementér dem i flere klasser.
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
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
- Udvidelse af klasser med nedarvning
- Abstrakte klasser og metoder
- Implementering af interfaces
- Traits til genbrug af kode