0Pricing
PHP Academy · Lekcja

Przegląd metod magicznych

Poznaj __toString, __get, __set i inne magiczne metody PHP

Przegląd metod magicznych to bezpłatna lekcja PHP Academy na CoddyKit. To lekcja 4 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej PHP Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs PHP Academy zawiera 4 lekcji w sumie.

Wprowadzenie: magiczne metody PHP

Magiczne metody to specjalne metody PHP z prefiksem składającym się z dwóch znaków podkreślenia, które silnik PHP uruchamia automatycznie w określonych sytuacjach. Udostępniają one punkty zaczepienia pozwalające wpływać na zachowanie obiektów.

Podstawowe pojęcia

Najważniejsze pojęcia dotyczące magicznych metod PHP:

  • __toString() — konwersja obiektu na ciąg znaków
  • __get/__set/__isset/__unset — przechwytywanie dostępu do właściwości
  • __call/__callStatic — przechwytywanie wywołań metod
  • __invoke() — obiekt wywoływalny

__toString

Przykład:

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

Ciąg dalszy:

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

Ćwiczenie:

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

Więcej szczegółów:

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

Użycie zaawansowane:

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

Wzorzec stosowany w praktyce:

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

Najlepsze praktyki:

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

Wzorzec praktyczny

Połączmy wszystkie elementy, korzystając z praktycznego wzorca dotyczącego magicznych metod PHP.

Typowe pułapki

Unikaj tych typowych błędów związanych z magicznymi metodami PHP:

  • Korzystaj z __toString(), aby obiekty były wyświetlane w zrozumiały sposób
  • __get/__set umożliwiają tworzenie wzorców proxy/dekoratora
  • __invoke sprawia, że obiekty mogą działać jako funkcje wywoływalne (co jest przydatne wraz z array_map)
  • __debugInfo zapobiega pojawianiu się poufnych danych w var_dump

Szybkie sprawdzenie

Jaka magiczna metoda sprawia, że obiekt PHP można wywołać jak funkcję?

Podsumowanie: magiczne metody PHP

Omówiliśmy magiczne metody PHP. Najważniejsze informacje:

  • Korzystaj z __toString(), aby obiekty były wyświetlane w zrozumiały sposób
  • __get/__set umożliwiają tworzenie wzorców proxy/dekoratora
  • __invoke sprawia, że obiekty mogą działać jako funkcje wywoływalne (co jest przydatne wraz z array_map)
  • __debugInfo zapobiega pojawianiu się poufnych danych w var_dump

Często zadawane pytania

Czy lekcja „Przegląd metod magicznych” jest bezpłatna?

Tak — pełny tekst „Przegląd metod magicznych” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu PHP Academy, przejdź na CoddyKit PRO. Kurs PHP Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Przegląd metod magicznych”?

Poznaj __toString, __get, __set i inne magiczne metody PHP Ćwiczysz PHP Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć PHP Academy?

Nie wymagamy żadnego doświadczenia. PHP Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 4 z 4.

Ile czasu zajmuje lekcja „Przegląd metod magicznych”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji PHP Academy?

Tak. Każda lekcja PHP Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Klasy, właściwości i metody
  2. Konstruktory i destruktory
  3. Właściwości i metody statyczne
  4. Przegląd metod magicznych
← Powrót do PHP Academy