Abstrakte klasser og metoder
Definer delvis implementerte basisklasser med nøkkelordet abstract.
Abstrakte klasser og metoder er en gratis leksjon i PHP Academy på CoddyKit. Dette er leksjon 2 av 4. Du kan lese hele leksjonen gratis nedenfor – og deretter øve praktisk i nettleseren med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i PHP Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i PHP Academy inneholder totalt 4 leksjoner.
Introduksjon: Abstrakte klasser
En abstrakt klasse kan ikke instansieres direkte – den fungerer som en mal. Abstrakte metoder deklarerer en signatur uten implementasjon; underklasser må implementere dem.
Viktige konsepter
Viktige konsepter:
- Deklareres med
abstract class - Abstrakte metoder har ingen kropp:
abstract public function x(); - Underklasser må implementere alle abstrakte metoder
- Kan inneholde både abstrakte og konkrete metoder
Definere en 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();
}
}Implementere abstrakte metoder
Fortsettelse:
<?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: MeowTemplate Method-mønsteret
Mer fordypning:
<?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 grensesnitt
Praktisk bruk:
<?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 implementasjon
Avansert:
<?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
Vanlige mønstre med abstrakte klasser brukes til å løse tilbakevendende designproblemer på en ryddig måte. Bruk dem konsekvent for å skrive lesbar og vedlikeholdbar kode.
Når det bør brukes
Det er like viktig å vite når abstrakte klasser bør brukes, som å vite hvordan. Overdreven bruk fører til kompleksitet, mens for lite bruk fører til duplisering.
Eksempel fra virkeligheten
I virkelige applikasjoner brukes abstrakte klasser ofte i rammeverk, ORM-er og tjenestelag. Når De forstår dette, er De bedre forberedt på å bidra i profesjonelle PHP-prosjekter.
Vanlige fallgruver
Unngå disse feilene med abstrakte klasser:
- Abstrakte klasser kan ikke instansieres med new
- Alle abstrakte metoder må implementeres i konkrete underklasser
- Bruk Template Method-mønsteret til å definere algoritmeskjeletter
- Abstrakte klasser kan ha konstruktører, egenskaper og konkrete metoder
Rask kontroll
Kan De instansiere en abstrakt klasse direkte med «new»?
Oppsummering: Abstrakte klasser
Oppsummering:
- Abstrakte klasser kan ikke instansieres med new
- Alle abstrakte metoder må implementeres i konkrete underklasser
- Bruk Template Method-mønsteret til å definere algoritmeskjeletter
- Abstrakte klasser kan ha konstruktører, egenskaper og konkrete metoder
Lær deg PHP med en AI-veileder – gratis
Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.
- Kurs
- 49
- Leksjoner
- 195
Ofte stilte spørsmål
Er leksjonen «Abstrakte klasser og metoder» gratis?
Ja – hele teksten i «Abstrakte klasser og metoder» er gratis å lese her på nettet. For å øve interaktivt med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt, og for å låse opp resten av PHP Academy-kurset, kan du oppgradere til CoddyKit PRO. Kurset i PHP Academy inneholder totalt 4 leksjoner.
Hva lærer jeg i «Abstrakte klasser og metoder»?
Definer delvis implementerte basisklasser med nøkkelordet abstract. Du øver på PHP Academy med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.
Trenger jeg erfaring for å begynne med PHP Academy?
Ingen tidligere erfaring er nødvendig. PHP Academy på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 2 av 4.
Hvor lang tid tar leksjonen «Abstrakte klasser og metoder»?
De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.
Kan jeg skrive og kjøre kode i denne PHP Academy-leksjonen?
Ja. Alle PHP Academy-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.
Alle leksjonene i dette kurset
- Utvide klasser med arv
- Abstrakte klasser og metoder
- Implementere grensesnitt
- Traits for gjenbruk av kode