Menu
Coddy logo textTech

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:

MetodaWywoł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 Mastery

Bez __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ę.

challenge icon

Wyzwanie

Łatwy

Zbudujmy 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)

?>
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Programowanie obiektowe

Poćwicz samodzielnie: Kompilator PHP online