PHP Academy · leksjon

Oversikt over magiske metoder

Lær om __toString, __get, __set og andre magiske PHP-metoder.

Leksjon 4 av 413 trinn

Oversikt over magiske metoder er en gratis leksjon i PHP Academy på CoddyKit. Dette er leksjon 4 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: Magiske PHP-metoder

Magiske metoder er spesielle PHP-metoder med prefiks med to understreker, som PHP-motoren utløser automatisk i bestemte situasjoner. De gir Dem inngangspunkter til objekters oppførsel.

Grunnleggende konsepter

Viktige konsepter for magiske PHP-metoder:

  • __toString() — konvertering av objekt til streng
  • __get/__set/__isset/__unset — avskjæring av tilgang til egenskaper
  • __call/__callStatic — avskjæring av metodekall
  • __invoke() — kallbart objekt

__toString

Eksempel:

<?php
class Money {
    public function __construct(
        private float  $amount,
        private string $currency
    ) {}

    public function __toString(): string {
        return number_format($this->amount, 2) . ' ' . $this->currency;
    }
}

$price = new Money(9.99, 'USD');
echo $price;            // 9.99 USD
echo 'Price: ' . $price; // Price: 9.99 USD

__get og __set

Fortsettelse:

<?php
class DynamicObject {
    private array $data = [];

    public function __get(string $name): mixed {
        return $this->data[$name] ?? null;
    }

    public function __set(string $name, mixed $value): void {
        $this->data[$name] = $value;
    }
}

$obj = new DynamicObject();
$obj->name = 'Alice';
echo $obj->name;  // Alice

__isset og __unset

Øvelse:

<?php
class Model {
    private array $attributes = [];

    public function __set(string $k, mixed $v): void { $this->attributes[$k] = $v; }
    public function __get(string $k): mixed { return $this->attributes[$k] ?? null; }
    public function __isset(string $k): bool { return isset($this->attributes[$k]); }
    public function __unset(string $k): void { unset($this->attributes[$k]); }
}

$m = new Model();
$m->email = 'a@b.com';
var_dump(isset($m->email));  // true
unset($m->email);
var_dump(isset($m->email));  // false

__call og __callStatic

Fordypning:

<?php
class FluentQuery {
    private array $clauses = [];

    public function __call(string $name, array $args): static {
        $this->clauses[$name] = $args[0] ?? null;
        return $this;
    }

    public function toSql(): string {
        return 'SELECT * FROM '
            . ($this->clauses['from'] ?? 'unknown');
    }
}

echo (new FluentQuery())->from('users')->toSql();
// SELECT * FROM users

__invoke

Avansert bruk:

<?php
class Multiplier {
    public function __construct(private float $factor) {}

    public function __invoke(float $value): float {
        return $value * $this->factor;
    }
}

$double = new Multiplier(2);
echo $double(5);   // 10
echo $double(21);  // 42

$funcs = [new Multiplier(2), new Multiplier(3)];
foreach ($funcs as $fn) echo $fn(4) . ' '; // 8 12

__clone

Praktisk mønster:

<?php
class Config {
    private array $data = [];

    public function set(string $k, mixed $v): self {
        $this->data[$k] = $v;
        return $this;
    }

    public function __clone() {
        // deep clone nested objects if needed
    }
}

$original = (new Config())->set('theme', 'dark');
$copy = clone $original;  // triggers __clone

__debugInfo

Beste praksis:

<?php
class ApiClient {
    public function __construct(
        private string $baseUrl,
        private string $apiKey  // sensitive!
    ) {}

    public function __debugInfo(): array {
        return [
            'baseUrl' => $this->baseUrl,
            'apiKey'  => '***' . substr($this->apiKey, -4),  // mask key
        ];
    }
}

var_dump(new ApiClient('https://api.example.com', 'secret123'));
// Shows masked key

Praktisk mønster

Her settes alt sammen i et praktisk mønster for magiske PHP-metoder.

Vanlige fallgruver

Unngå disse vanlige feilene med magiske PHP-metoder:

  • Bruk __toString() slik at objekter skrives ut på en meningsfull måte
  • __get/__set muliggjør proxy-/dekoratørmønstre
  • __invoke gjør objekter kallbare (nyttig med array_map)
  • __debugInfo hindrer at sensitive data vises i var_dump

Rask kontroll

Hvilken magisk metode gjør et PHP-objekt kallbart som en funksjon?

Oppsummering: Magiske PHP-metoder

De har gått gjennom magiske PHP-metoder. Viktige punkter å huske:

  • Bruk __toString() slik at objekter skrives ut på en meningsfull måte
  • __get/__set muliggjør proxy-/dekoratørmønstre
  • __invoke gjør objekter kallbare (nyttig med array_map)
  • __debugInfo hindrer at sensitive data vises i var_dump
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 «Oversikt over magiske metoder» gratis?

Ja – hele teksten i «Oversikt over magiske 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 «Oversikt over magiske metoder»?

Lær om __toString, __get, __set og andre magiske PHP-metoder. 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 4 av 4.

Hvor lang tid tar leksjonen «Oversikt over magiske 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. Klasser, egenskaper og metoder
  2. Konstruktører og destruktører
  3. Statiske egenskaper og metoder
  4. Oversikt over magiske metoder
← Tilbake til PHP Academy