Abstrakte klasser og metoder
Definér delvist implementerede basisklasser med nøgleordet abstract.
Abstrakte klasser og metoder er en gratis PHP Academy-lektion på CoddyKit. Dette er lektion 2 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: Abstrakte klasser
En abstrakt klasse kan ikke instantieres direkte – den fungerer som en skabelon. Abstrakte metoder erklærer en signatur uden implementering; underklasser skal levere dem.
Nøglebegreber
Vigtige begreber:
- Erklæres med
abstract class - Abstrakte metoder har ingen krop:
abstract public function x(); - Underklasser skal implementere alle abstrakte metoder
- Kan indeholde både abstrakte og konkrete metoder
Definition af abstrakt klasse
Eksempel:
<?php
abstract class Animal {
public function __construct(protected string $name) {}
// Must be implemented by each subclass
abstract public function sound(): string;
// Shared concrete method
public function introduce(): string {
return "I am {$this->name} and I say: " . $this->sound();
}
}Implementering af abstrakte metoder
Fortsat:
<?php
class Dog extends Animal {
public function sound(): string { return 'Woof'; }
}
class Cat extends Animal {
public function sound(): string { return 'Meow'; }
}
$animals = [new Dog('Rex'), new Cat('Whiskers')];
foreach ($animals as $a) {
echo $a->introduce() . PHP_EOL;
}
// I am Rex and I say: Woof
// I am Whiskers and I say: MeowSkabelonmetodemønster
Større fordybelse:
<?php
abstract class DataProcessor {
// Template method: defines the algorithm skeleton
final public function process(array $data): array {
$data = $this->validate($data);
$data = $this->transform($data);
return $this->format($data);
}
abstract protected function validate(array $data): array;
abstract protected function transform(array $data): array;
protected function format(array $data): array { return $data; }
}Abstrakt klasse kontra grænseflade
Praktisk brug:
<?php
// Use abstract class when:
// - Subclasses share implementation code
// - You need constructor logic or state
// Use interface when:
// - Defining a contract (no implementation needed)
// - Multiple inheritance of type is needed
// A class can only extend ONE abstract class
// but can implement MULTIPLE interfacesDelvis implementering
Avanceret:
<?php
abstract class Repository {
// Concrete method available to all subclasses
protected function findById(int $id, string $table): array {
$stmt = $this->getDb()->prepare("SELECT * FROM $table WHERE id = ?");
$stmt->execute([$id]);
return $stmt->fetch(PDO::FETCH_ASSOC) ?: [];
}
abstract protected function getDb(): PDO;
abstract public function find(int $id): array;
}Mønster
Almindelige mønstre for abstrakte klasser 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 abstrakte klasser, 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 abstrakte klasser 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 abstrakte klasser:
- Abstrakte klasser kan ikke instantieres med new
- Alle abstrakte metoder skal implementeres i konkrete underklasser
- Brug skabelonmetodemønsteret til at definere algoritmers grundstruktur
- Abstrakte klasser kan have konstruktører, egenskaber og konkrete metoder
Hurtig kontrol
Kan du instantiere en abstrakt klasse direkte med 'new'?
Opsummering: Abstrakte klasser
Opsummering:
- Abstrakte klasser kan ikke instantieres med new
- Alle abstrakte metoder skal implementeres i konkrete underklasser
- Brug skabelonmetodemønsteret til at definere algoritmers grundstruktur
- Abstrakte klasser kan have konstruktører, egenskaber og konkrete metoder
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 “Abstrakte klasser og metoder” gratis?
Ja — hele teksten til “Abstrakte klasser og metoder” 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 “Abstrakte klasser og metoder”?
Definér delvist implementerede basisklasser med nøgleordet abstract. 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 2 af 4.
Hvor lang tid tager lektionen “Abstrakte klasser og metoder”?
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