Konstruktører og destruktører
Initialiser objekter med __construct og rydd opp med __destruct.
Konstruktører og destruktører 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: Konstruktører og destruktører
Metoden __construct() kjøres automatisk når et nytt objekt opprettes. Metoden __destruct() kjøres når objektet samles inn av søppelsamleren. PHP 8 introduserte property promotion i konstruktører.
Grunnleggende konsepter
Viktige konsepter for konstruktører og destruktører:
__construct()initialiserer objektet- Property promotion i konstruktører forkorter koden
__destruct()brukes til opprydding (filhåndtak, tilkoblinger)- Foreldrekonstruktøren kalles med
parent::__construct()
Grunnleggende konstruktør
Eksempel:
<?php
class User {
public string $name;
public string $email;
public function __construct(string $name, string $email) {
$this->name = $name;
$this->email = $email;
}
}
$user = new User('Alice', 'alice@example.com');
echo $user->name; // AliceProperty promotion i konstruktører (PHP 8)
Fortsettelse:
<?php
class User {
// Shorthand: declare and assign in one go
public function __construct(
public readonly string $name,
public readonly string $email,
private int $loginCount = 0,
) {}
}
$u = new User('Bob', 'bob@test.com');
echo $u->name; // BobValidering i konstruktøren
Øvelse:
<?php
class PositiveInt {
public function __construct(private int $value) {
if ($value <= 0) {
throw new InvalidArgumentException(
"Value must be positive, got $value"
);
}
}
public function get(): int { return $this->value; }
}
$n = new PositiveInt(5); // OK
// new PositiveInt(-1); // throwsDestruktør
Fordypning:
<?php
class FileLogger {
private mixed $handle;
public function __construct(string $path) {
$this->handle = fopen($path, 'a');
}
public function log(string $msg): void {
fwrite($this->handle, date('c') . ' ' . $msg . PHP_EOL);
}
public function __destruct() {
if ($this->handle) fclose($this->handle);
echo 'File handle released';
}
}Mønsteret navngitt konstruktør
Avansert bruk:
<?php
class Money {
private function __construct(
private float $amount,
private string $currency
) {}
public static function usd(float $a): self { return new self($a, 'USD'); }
public static function eur(float $a): self { return new self($a, 'EUR'); }
public function format(): string {
return number_format($this->amount, 2) . ' ' . $this->currency;
}
}
echo Money::usd(9.99)->format(); // 9.99 USDForeldrekonstruktør
Praktisk mønster:
<?php
class Animal {
public function __construct(
protected string $name,
protected string $sound
) {}
}
class Dog extends Animal {
public function __construct(string $name) {
parent::__construct($name, 'Woof');
}
public function speak(): string {
return "{$this->name} says {$this->sound}!";
}
}
echo (new Dog('Rex'))->speak(); // Rex says Woof!Sen statisk binding i konstruktører
Beste praksis:
<?php
class Base {
public static function create(): static {
return new static(); // 'static' resolves to calling class
}
}
class Child extends Base {}
$base = Base::create(); // Base object
$child = Child::create(); // Child object — static binding worksPraktisk mønster
Her settes alt sammen i et praktisk mønster for konstruktører og destruktører.
Vanlige fallgruver
Unngå disse vanlige feilene med konstruktører og destruktører:
- Kall alltid parent::__construct() når De utvider en klasse
- Bruk property promotion i PHP 8+ for å redusere overflødig kode
- Det er ikke garantert at destruktøren kjøres på et bestemt tidspunkt
- Foretrekk navngitte konstruktører fremfor flere __construct()-overlagringer
Rask kontroll
Hva er property promotion i konstruktører i PHP 8?
Oppsummering: Konstruktører og destruktører
De har gått gjennom konstruktører og destruktører. Viktige punkter å huske:
- Kall alltid parent::__construct() når De utvider en klasse
- Bruk property promotion i PHP 8+ for å redusere overflødig kode
- Det er ikke garantert at destruktøren kjøres på et bestemt tidspunkt
- Foretrekk navngitte konstruktører fremfor flere __construct()-overlagringer
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 «Konstruktører og destruktører» gratis?
Ja – hele teksten i «Konstruktører og destruktører» 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 «Konstruktører og destruktører»?
Initialiser objekter med __construct og rydd opp med __destruct. 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 «Konstruktører og destruktører»?
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
- Klasser, egenskaper og metoder
- Konstruktører og destruktører
- Statiske egenskaper og metoder
- Oversikt over magiske metoder