PHP Academy · Lektion

Abstrakte klasser og metoder

Definér delvist implementerede basisklasser med nøgleordet abstract.

Lektion 2 af 413 trin

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: Meow

Skabelonmetodemø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 interfaces

Delvis 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
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 “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

  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