Ostatnia aktualizacja:

1 września 2025

Opublikowano:

23 maja 2017

Magiczne metody PHP

Magiczne metody PHP

Magiczne metody w PHP’ie, to metody z zarezerwowanym prefiksem w postaci podwójnego podkreślenia „__”. Funkcje te nie są bezpośrednio używane przez programistę, lecz są one automatycznie wywoływane przez interpreter w odpowiedzi na poszczególne zachowania danej klasy, dlatego są nazwane ‘magicznymi’.

W tym artykule dowiesz się:
  1. __construct()
  2. __destruct()
  3. __get()
  4. __set()
  5. __call()
  6. __callStatic()
  7. __isset()
  8. __sleep()
  9. __wakeup()
  10. _toString()
  11. __invoke()
  12. _clone()

__construct()

Funkcja odpala się w momencie utworzenia obiektu, wykorzystujemy ją do przygotowania wszystkich potrzebnych danych dla klasy przed rozpoczęciem pracy.

      {
        echo ‘Wywołano konstruktor’;
      }

__destruct()

Destruktor jak wskazuje nazwa, wywoływany jest na zakończenie pracy danego obiektu przez garbage collector, zwalniając zajęte przez klasę zasoby. Możemy go wykorzystać np. do zamknięcia wcześniej otwartego pliku we wnętrzu klasy albo rozłączenie z bazą danych.

public function __destruct() 
  {
            fclose($this->file);
    }

__get()

Wywoływana jest, gdy próbujemy się dostać do własności lub zmiennej w klasie, która nie istnieje, lub nie mamy do niej dostępu. Przyjmuje jeden argument, który jest nazwą pola, do którego próbujemy się odnieść.

public function __get($name)
  {
   echo ‘Pole ‘.$name.’ nie istnieje lub nie masz do niego dostępu’;
  }

__set()

Funkcja wykonuje się, gdy próbujemy przypisać wartość do zmiennej, która nie istnieje lub nie mamy do niej dostępu. Przyjmuje 2 argumenty, pierwszy z nazwą pola, a drugi z wartością jaką próbowaliśmy przypisać.

public function __set($name, $value)
  {
   echo ‘Nie można przypisać wartości : ‘.$value.’ do pola ‘.$name;
  }

__call()

Odpala się w momencie gdy próbujemy uzyskać dostęp do metody, która nie istnieje lub nie mamy do niej dostępu. Przyjmuje ona 2 argumenty, pierwszy z nazwą metody, do której chcieliśmy uzyskać dostęp, a drugi z parametrami przekazanymi do niej.

public function __call($name, $arguments)
  {
   echo ‘Wywołano funckję ‘.$name.’, z argumentami ‘.implode(', ', $arguments);
  }

__callStatic()

Analogicznie do metody __*call() **do obsługi metod statycznych.

__isset()

Wywoływana jest, gdy użyjemy na polu obiektu, którego nie ma funkcji isset()

public function __isset($name)
  {
   echo ‘Wywołano isset dla pola ‘.$name;
  }

__unset()

Funkcja odpala się gdy próbujemy użyć unset() na nieistniejącej własności danego obiektu.

public function __unset($name)
{
 echo ‘Wywołano unset dla pola ‘.$name;
}

__sleep()

Funkcja **serialize() **sprawdza, czy w klasie istnieje metoda __sleep() i jeśli tak to wywołuje ją. Wykorzystywana jest gdy chcemy wybrać pola, które mają zostać zserializowane. Jako wynik tej funkcji zwracamy tablicę z nazwami pól które mają zostać zserializowane.

public function __sleep()
  {
   return array(‘name’);
  }

Jako wynik serializacji klasy zawierającej tę metodę, zostanie zwrócone tylko pole z nazwą.

__wakeup()

Analogicznie, unserialize() sprawdza, czy istnieje funkcja o magicznej nazwie __wakeup(). Jeśli tak, funkcja może rekonstruować dowolne zasoby, które obiekt może posiadać.

_toString()

Funkcja zostanie wywołana w momencie, gdy będziemy chcieli użyć naszego obiektu jako stringa.

data-enlighter-theme="eclipse">public function __toString()
  {
   return $this->name;
  }

__invoke()

Metoda zostanie odpalona, kiedy spróbujemy wywołać nasz obiekt jako funkcję.

public class Object
{
  public function __invoke()
  {
   echo ‘Wykonano metode __invoke’;
  }
}


$object = new Object();
$object();

_clone()

Metoda jest wykonywana w momencie, kiedy próbujemy sklonować obiekt za pomocą funkcji clone, możemy dzięki niej przygotować obiekt do sklonowania, którego wynikiem będzie identyczna kopia obiektu, jednak gdy chcemy stworzyć samodzielny obiekt, który ma zachować np. referencje do innych obiektów musimy ‘poprawić’ klonowanie.

class object
{
  public $object1;

  function __clone()
  {
    $this->object1 = clone $this->object1;
  }
}
Ostatnia aktualizacja:

1 września 2025

Opublikowano:

23 maja 2017

W tym artykule dowiesz się:
  1. __construct()
  2. __destruct()
  3. __get()
  4. __set()
  5. __call()
  6. __callStatic()
  7. __isset()
  8. __sleep()
  9. __wakeup()
  10. _toString()
  11. __invoke()
  12. _clone()

Polecane artykuły

Koszt Prestashop - Ile zapłacisz za profesjonalny e-sklep? - wideo

Koszt Prestashop – Ile zapłacisz za profesjonalny e-sklep?

Ile kosztuje sklep na Prestashop? Jaka jest realna cena stworzenia i prowadzenia sklepu internetowego na tej platformie? Czy Prestashop jest opłacalnym rozwiązaniem dla Twojego biznesu? Wielu przedsiębiorców, planujących rozpoczęcie sprzedaży online, zastanawia się nad tym, za ile wdrożą sklep na Preście. W tym materiale szczegółowo omawiam ten temat, analizując wydatki związane z kodowaniem, designem, customizacjami i niezbędnymi integracjami. Dzięki temu dowiesz się, jaki sklep wdrożysz na Prestashop za 50.000, jaki za 100.000, a jaki za 200.000 złotych. Jeśli chcesz świadomie zaplanować budżet i uniknąć ukrytych wydatków, koniecznie obejrzyj ten film!

Czytaj więcej
Badania stron

Badania stron

Oferując określone produkty i usługi w Internecie, należy liczyć się z tym, że znajdą się firmy prowadzące działalność konkurencyjną. Nie jest to wcale zła informacja. Konkurencja potrafi pozytywnie stymulować rozwój firmy oraz polepszać poziom świadczonych usług, co w efekcie przekłada się na zadowolenie klientów. Aby skorzystać jak najwięcej na jej istnieniu, warto przeanalizować ich ofertę, […]

Czytaj więcej
Testy regresji

Testy regresji w e-Commerce

Głównym celem działania serwisów e-Commercowych jest prawidłowe i przyjazne przeprowadzanie użytkownika przez proces zakupowy: od momentu zaprezentowania produktu, wyboru konkretnego produktu, aż do płatności zakończonej sukcesem. To właśnie problemy w tym zakresie i przeszkody na etapie przejścia tej ścieżki, mogą zniechęcić klienta, który finalnie może wyjść z naszego sklepu i wybrać inny. Testy regresji – […]

Czytaj więcej
Automatyczne testy aplikacji mobilnych

Automatyczne testy aplikacji mobilnych

Testy są nieodłącznym elementem wytwarzania oprogramowania. Wykonuje się je przede wszystkim w celu znalezienia błędów, sprawdzania kompatybilności i stabilności aplikacji. Dopóki aplikacja jest mała, wszystkie testy jest w stanie wykonywać tester, ale z czasem konieczna jest automatyzacja – w której tematykę chciałbym dziś Was wprowadzić. A na co to komu? Zacznę od trochę abstrakcyjnej historii. […]

Czytaj więcej

Skontaktuj się z nami

Opowiedz nam o swoich ambicjach związanych z e-commerce i pozwól nam wspólnie je zrealizować.

Skontaktuj się z nami