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

Lista agencji magento w Polsce

Agencje Magento w Polsce – lista 2026

Magento od lat pozostaje jedną z najważniejszych platform e-Commerce dla firm, które potrzebują czegoś więcej niż prostego sklepu internetowego. To rozwiązanie wybierane przez marki planujące rozwój sprzedaży online, obsługę dużej liczby produktów, integracje z systemami zewnętrznymi, sprzedaż B2B, B2C lub działania na wielu rynkach jednocześnie. Właśnie dlatego tak ważny jest wybór odpowiedniej agencji Magento – […]

Czytaj więcej
Cechy dobrej aplikacji mobilnej

Cechy dobrej aplikacji mobilnej

Kolejny piątek, kolejny wpis na blogu, kolejne ciekawostki, które możecie wprowadzić w ramach swojego e-biznesu. Dalej będę kontynuował temat mobile, jako że jest to dziedzina, którą upodobałem sobie najbardziej. W ostatnim wpisie skupiłem się na korzyściach z posiadania aplikacji mobilnej. Dzisiaj chciałbym skupić swoją uwagę problemach w działaniu aplikacji. Cechy dobrej aplikacji mobilnej Zapewne większość […]

Czytaj więcej
Zmiana silnika e-Commerce

Kiedy Twój e-Commerce mówi Ci, że najwyższa pora na zmianę platformy

E-Commerce to nie zardzewiała drezyna z XIX wieku, a raczej francuskie TGV, które pędzi do przodu z zawrotną prędkością. Jest to jedna z najbardziej dynamicznych branż na świecie. I chociaż wydawałoby się, że ten rynek jest już u szczytu swoich możliwości i już nic więcej nie da się na nim ugrać, wciąż jednak pojawiają się […]

Czytaj więcej
Zmiana platformy e-commerce

Kiedy zmienić platformę e-Commerce?

W świecie e-Commerce jedyną stałą rzeczą jest zmiana. Właściciele e-biznesów, którzy chcą być na czasie, nie mają łatwego życia. Nowa metoda płatności, z którą trzeba się zintegrować, zmiany w prawie, rozwijająca się konkurencja, zmienne przyzwyczajenia użytkowników, nowinki techniczne, nowe trendy stylistyczne, rozwój narzędzi… mógłbym tak wymieniać bez końca. Oczywiście zmiana to nic złego. Ci, którzy […]

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
Expert Consultation

Darmowa konsultacja