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 keyWzorzec 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
- Klasy, właściwości i metody
- Konstruktory i destruktory
- Właściwości i metody statyczne
- Przegląd metod magicznych