PHP Academy · Lektion

Introduktion til magiske metoder

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

Lektion 4 af 413 trin

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

Magiske metoder er særlige PHP-metoder med præfikser med to underscores, som PHP-motoren automatisk udløser i bestemte situationer. De giver dig mulighed for at koble dig på objekters adfærd.

Kernebegreber

Vigtige begreber om magiske metoder i PHP:

  • __toString() — konvertering fra objekt til streng
  • __get/__set/__isset/__unset — opfangning af adgang til egenskaber
  • __call/__callStatic — opfangning af metodekald
  • __invoke() — objekt, der kan kaldes

__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

Fortsat:

<?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

Fordybelse:

<?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

Avanceret brug:

<?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

Mønster fra praksis:

<?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

Bedste 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 samler du det hele i et praktisk mønster for magiske metoder i PHP.

Almindelige faldgruber

Undgå disse almindelige fejl med magiske metoder i PHP:

  • Brug __toString(), så objekter udskrives på en meningsfuld måde
  • __get/__set gør proxy- og decoratormønstre mulige
  • __invoke gør objekter kaldelige (nyttigt sammen med array_map)
  • __debugInfo forhindrer, at følsomme data vises i var_dump

Hurtig kontrol

Hvilken magisk metode gør et PHP-objekt kaldeligt som en funktion?

Opsummering: Magiske metoder i PHP

Du har gennemgået magiske metoder i PHP. Vigtige punkter at huske:

  • Brug __toString(), så objekter udskrives på en meningsfuld måde
  • __get/__set gør proxy- og decoratormønstre mulige
  • __invoke gør objekter kaldelige (nyttigt sammen med array_map)
  • __debugInfo forhindrer, at følsomme data vises i var_dump
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 “Introduktion til magiske metoder” gratis?

Ja — hele teksten til “Introduktion til magiske 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 “Introduktion til magiske metoder”?

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

Hvor lang tid tager lektionen “Introduktion til magiske 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. Klasser, egenskaber og metoder
  2. Konstruktører og destruktører
  3. Statiske egenskaber og metoder
  4. Introduktion til magiske metoder
← Tilbage til PHP Academy