Metody magiczne w PHP
Stronę tą wyświetlono już: 3323 razy
Metody magiczne w PHP są specjalnymi metodami wywoływanymi automatycznie przez interpreter w określonych sytuacjach. Nazwy wszystkich metod magicznych zaczynają się od podwójnego znaku dolnej spacji "__", z czego wynika, że znane powinny być ci dwie pierwsze metody magiczne: __construct (konstruktor) i __destruct. Konstruktor jest oczywiście wywoływany przez interpreter przy tworzeniu nowego obiektu klasy, zaś destruktor, gdy klasa jest niszczona.
Metody magiczne __get, __set, __isset i __unset.
Pierwsze dwie metody __get i __set słusznie mogą się kojarzyć z ustawianiem pól klasy, natomiast __isset służy do sprawdzania, czy dana zmienna została ustawiona a __unset do zwalniania pamięci przypisanej do danej zmiennej. Co ciekawe dane pole klasy tak naprawdę może być zawarte w jednej zmiennej tablicowej typu array. Oto przykład:
Wynik powyższego kodu:
Konstruktor wywołany
Opis
Data nie została ustawionaarray (size=1) 'description' => string 'Opis' (length=4)
usuwam
array (size=0) empty
Destruktor wywołany, obiekt jest usuwany
Metoda magiczna __toString
Ta metoda jest wywoływana automatycznie np. gdy dwa obiekty są łączone w tekst za pomocą operatora . (kropki). Oto przykład implementacji tej metody dla wcześniej utworzonej klasy Settings:
Wywołanie powyższej metody magicznej na obiekcie klasy Settings wygląda następująco:
Wynik działania:
description: Opis
Metoda magiczna __invoke
Ta metoda umożliwia wywołanie obiektu klasy jak funkcji. Oto przykład obsłużenia tej metody dla wcześniej utworzonej klasy Settings:
Wywołanie powyższej metody na obiekcie klasy Settings będzie wyglądało tak:
Można sprawdzić, czy dany obiekt funkcji obsługuje tego typu wywołania za pomocą funkcji is_callable.
Wynikiem czego będzie:
string 'Opis' (length=4)
Metoda magiczna __call i __callStatic
Obie te metody obsługują wywołanie nieistniejącej metody klasy. Jedyną różnicą jest to, że pierwsza dotyczy metod obiektu klasy, natomiast druga metod statycznych klasy. oto przykład obsługi tych magicznych metod dla wyżej utworzonej klasy Settings:
Wywołanie metody __call:
Wynik działania powyższego kodu:
Metoda $this->metoda(argument1)
Metoda $this->metoda(argument1, argument2)
Wywołanie metody __callStatic:
Wynik działania powyższego kodu:
Metoda $this->metodaStatyczna(argument1)
Metoda $this->metodaStatyczna(argument1, argument2)
Metoda magiczna __clone
Ponieważ w PHP wszystkie obiekty klas są typami referencyjnymi, zachodzi konieczność sklonowania zawartości klasy. Do tego celu służy słowo kluczowe clone, którego użycie spowoduje wywołanie metody magicznej __clone, ale tylko wtedy, gdy metoda ta zostanie obsłużona. Obsługi tej metody magicznej wymagają jedynie te klasy, które będą przechowywały wewnątrz obiekty innych klas, ponieważ domyślnie (gdy metoda __clone nie jest obsłużona) kopiowane są wartości pól, które w przypadku obiektów klas są wskaźnikami. Oto przykład implementacji:
Wynik działania powyższego kodu:
Pierwszy samochód:
Marka samochodu: Mercedes; kolor nadwozia: RGB(0; 0; 0); opis silnika: 2.0 l 8-cylindrowy rzędowy
Drugi samochód samochód:
Marka samochodu: Mercedes; kolor nadwozia: RGB(100; 0; 0); opis silnika: 2.0 l 8-cylindrowy rzędowy
Gdyby z klasy Car wyrzucić metodę magiczną __clone, efekt działania kodu byłby taki:
Pierwszy samochód:
Marka samochodu: Mercedes; kolor nadwozia: RGB(100; 0; 0); opis silnika: 2.0 l 8-cylindrowy rzędowy
Drugi samochód samochód:
Marka samochodu: Mercedes; kolor nadwozia: RGB(100; 0; 0); opis silnika: 2.0 l 8-cylindrowy rzędowy
Zmieniłem składową koloru obiektu $mercedes2 a skutek tego jest widoczny również na obiekcie, z którego był on kopiowany. Spowodowane jest to oczywiście tym, że do nowej klasy przypisany został adres obiektu klasy typu Color a nie jego wartości.
Tytuł:
PHP i MySQL. Aplikacje internetowe po stronie serwera
Autor:
Jon Duckett
Tytuł:
PHP 8 i SQL. Programowanie dla początkujących w 43 lekcjach
Autor:
Mariusz Duka
Tytuł:
CodeIgniter 4. Zaawansowane tworzenie stron WWW w PHP
Autor:
Łukasz Sosna
Tytuł:
PHP 7 MySQL 8 i Maria DB Praktyczny podręcznik
Autor:
Steve Prettyman, Adrian W. West
Tytuł:
PHP i MySQL. Dynamiczne strony WWW. Szybki start. Wydanie V
Autor:
Larry Ullman
Tytuł:
PHP 7. Algorytmy i struktury danych
Autor:
Mizanur Rahman
Tytuł:
PHP i MySQL. Tworzenie stron WWW. Vademecum profesjonalisty. Wydanie V
Autor:
Luke Welling, Laura Thomson
Tytuł:
PHP i jQuery. Techniki zaawansowane. Wydanie II
Autor:
Keith Wald, Jason Lengstorf
Tytuł:
Laravel 4. Podstawy tworzenia aplikacji w PHP
Autor:
Raphaël Saunier
Tytuł:
Magento. Przewodnik dla programistów PHP
Autor:
Allan MacGregor