PHP Academy · leksjon

Abstrakte klasser og metoder

Definer delvis implementerte basisklasser med nøkkelordet abstract.

Leksjon 2 av 413 trinn

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

Template 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 interfaces

Delvis 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
Gratis å komme i gang

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

  1. Utvide klasser med arv
  2. Abstrakte klasser og metoder
  3. Implementere grensesnitt
  4. Traits for gjenbruk av kode
← Tilbake til PHP Academy