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

3 sygnały, że Twoja firma POTRZEBUJE systemu PIM (zanim zrobi się za późno)

Kiedy naprawdę warto wdrożyć PIM? Jeśli masz w firmie chaos informacyjny, rosnącą liczbę produktów albo procesy, które po prostu nie wyrabiają przy obecnej skali - to możesz właśnie obserwować pierwsze sygnały, że PIM nie jest już „opcją”, tylko realną potrzebą. W tym odcinku opowiadam o 3 najczęstszych sygnałach, które widzę w firmach B2B, zanim decydują się na narzędzie PIM. Z tego materiału dowiesz się: ➡️ kiedy chaos w danych zaczyna kosztować realne pieniądze, ➡️ dlaczego rozproszone źródła prawdy o produkcie blokują skalowanie, ➡️ jak PIM wspiera procesy przy dużych katalogach i wielu rynkach, ➡️ kiedy inwestycja w PIM zwraca się najszybciej. Jeśli rozważasz digitalizację danych produktowych, wejście na nowe rynki lub po prostu chcesz pracować szybciej i czyściej - ten film pomoże Ci podjąć właściwą decyzję.

Czytaj więcej
sklep woocommerce cena i koszty

Sklep WooCommerce cena i koszty – czy to rzeczywiście się opłaca?

Planujesz postawić swój sklep internetowy na WordPressie i zastanawiasz się, ile będzie Cię to kosztować? Czy aby na pewno jest to rozwiązanie darmowe? Chcesz wiedzieć, czy wdrażając sklep WooCommerce cena nie będzie zbyt wysoka? W tym artykule poznasz realne koszty sklepu WooCommerce – nie tylko te „na papierze”, ale również te prawdziwe, o których nie […]

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
Licencje oprogramowania

Licencje oprogramowania w pigułce

Dzisiaj chciałbym opowiedzieć o różnych licencjach oprogramowania. Na początku pracy programisty albo podczas tworzenia oprogramowania tylko dla zaspokojenia własnej ciekawości lub dla polepszenia swoich umiejętności programistycznych, zazwyczaj nie musimy martwić się zależnościami, o ile nie będziemy korzystać z programowanego narzędzia. Inaczej sprawa się ma w przypadku poważniejszych projektów (niekoniecznie komercyjnych) – musimy uszanować prawa autorskie […]

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