Wprowadzenie do metod magicznych
Część sekcji Programowanie obiektowe ścieżki PHP w Coddy. Lekcja 44 z 91.
Metody magiczne to specjalne metody w PHP, które zaczynają się od podwójnych znaków podkreślenia (__) i są automatycznie wywoływane przez PHP w odpowiedzi na określone zdarzenia lub działania. Użyłeś już dwóch z nich: __construct() i __destruct().
Te metody pozwalają podpiąć się do wewnętrznego działania PHP i dostosować sposób, w jaki obiekty reagują na typowe operacje.
Na przykład, co się dzieje, gdy próbujesz wyświetlić obiekt? Albo uzyskać dostęp do właściwości, która nie istnieje? Metody magiczne dają Ci kontrolę nad takimi sytuacjami.
Oto krótkie omówienie najczęściej używanych metod magicznych:
| Metoda | Wywoływana, gdy |
|---|---|
__construct() | Tworzony jest obiekt |
__destruct() | Obiekt jest niszczony |
__toString() | Obiekt jest używany jako ciąg znaków |
__get() | Uzyskiwany jest dostęp do niezdefiniowanej właściwości |
__set() | Ustawiana jest niezdefiniowana właściwość |
__call() | Wywoływana jest niezdefiniowana metoda |
__clone() | Obiekt jest klonowany |
<?php
class Book {
public function __construct(
private string $title
) {}
public function __toString(): string {
return "Book: " . $this->title;
}
}
$book = new Book("PHP Mastery");
echo $book;
Wynik:
Book: PHP MasteryBez __toString() próba wyświetlenia obiektu za pomocą echo spowodowałaby błąd. Ta magiczna metoda przechwytuje tę czynność i zamiast tego zwraca reprezentację tekstową. W kolejnych lekcjach szczegółowo omówimy każdą magiczną metodę.
Wyzwanie
ŁatwyZbudujmy system katalogu filmów, który zapozna Cię z metodami magicznymi. Utworzysz klasę Movie, która używa __construct() do inicjalizacji danych filmu oraz __toString(), aby zapewnić czytelną reprezentację tekstową podczas wyświetlania obiektu.
Rozmieścisz swój kod w dwóch plikach:
Movie.php: Utwórz klasęMovie, która reprezentuje filmy w Twoim katalogu. Użyj promocji konstruktora, aby zdefiniować prywatne właściwości$title(string),$director(string) i$year(liczba całkowita). Zaimplementuj magiczną metodę__toString(), która zwraca sformatowany ciąg znaków:"[title] ([year]) - Directed by [director]". Dzięki temu obiekty filmów można bezpośrednio wyświetlać za pomocą echo, bez wywoływania osobnej metody.main.php: Dołącz plik Movie. Otrzymasz trzy dane wejściowe: tytuł filmu, imię i nazwisko reżysera oraz rok premiery. Utwórz instancjęMovie, używając tych wartości (przekonwertuj rok na liczbę całkowitą). Następnie po prostu wyświetl bezpośrednio obiekt filmu za pomocą echo: metoda__toString()zostanie automatycznie wywołana, aby utworzyć wynik.
Magia __toString() polega na tym, że PHP automatycznie wywołuje tę metodę za każdym razem, gdy obiekt jest używany w kontekście tekstowym. Zamiast pisać echo $movie->getInfo();, możesz po prostu napisać echo $movie;, a PHP zajmie się konwersją. Dzięki temu praca z obiektami staje się bardziej intuicyjna.
Spróbuj swoich sił
<?php
require_once 'Movie.php';
// Odczytaj dane wejściowe
$title = trim(fgets(STDIN));
$director = trim(fgets(STDIN));
$year = intval(fgets(STDIN));
// TODO: Utwórz instancję Movie, używając wartości wejściowych
// TODO: Wyświetl bezpośrednio obiekt filmu (metoda __toString() zostanie wywołana automatycznie)
?>Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Programowanie obiektowe
1Podstawy programowania obiektowego
Pliki zewnętrzneWprowadzenie do programowania obiektowegoKlasy a obiektySłowo kluczowe $thisMetodyWłaściwościKonstruktor (__construct)Destruktor (__destruct)Powtórka — prosty kalkulator4Dziedziczenie
Podstawy dziedziczeniaSłowo kluczowe parent::Przesłanianie metodSłowo kluczowe finalKlasy abstrakcyjnePowtórzenie – hierarchia pracowników7Enkapsulacja
Public, protected, privateModyfikatory dostępu w szczegółachGettery i setteryUkrywanie informacjiPromocja parametrów konstruktora (8.0)Podsumowanie — system ewidencji studentów2Przestrzenie nazw i autoloading
Wprowadzenie do przestrzeni nazwSłowo kluczowe useStandard autoloadingu PSR-4Autoloader ComposeraPodsumowanie – uporządkowany projekt5Interfejsy i kontrakty
Wprowadzenie do interfejsówImplementowanie interfejsówImplementowanie wielu interfejsówInterfejs a klasa abstrakcyjnaPodpowiadanie typów za pomocą interfejsówPodsumowanie — kalkulator kształtów8Metody magiczne
Wprowadzenie do metod magicznych__toString i __debugInfo__get, __set, __isset, __unset__call i __callStatic__clone i klonowanie obiektów__serialize i __unserializePodsumowanie — własna kolekcja11System typów i obsługa błędów
Deklaracje typówTypy nullableTypy sumy i przecięciaKlasy wyjątkówNiestandardowa hierarchia wyjątkówTry, Catch, FinallyPodsumowanie — walidator formularzy14Projekt: Zarządzanie biblioteką
Przegląd projektuKlasy książki i użytkownika3Właściwości klas
Właściwości instancji a właściwości statyczneStałe w klasachMetody i właściwości statyczneWłaściwości prywatne i chronioneWłaściwości tylko do odczytu (PHP 8.1)Podsumowanie — menedżer kont bankowych6Polimorfizm
Ponowne omówienie nadpisywania metodPolimorfizm za pomocą interfejsówPodpowiedzi typów i typy sumyPóźne wiązanie statycznePodsumowanie — procesor płatności9Cechy
Wprowadzenie do cechKorzystanie z wielu cechRozwiązywanie konfliktów cechMetody abstrakcyjne w cechachCechy a dziedziczenie12Wzorce projektowe, część 1
Wprowadzenie do wzorców projektowychWzorzec SingletonWzorzec FactoryWzorzec ObserverWzorzec StrategyPoćwicz samodzielnie: Kompilator PHP online