Sobes.tech
Junior

Jakie magiczne metody klas znasz?

sobes.tech AI

Odpowiedź od AI

Magiczne metody w PHP to specjalne metody, które są wywoływane automatycznie podczas określonych zdarzeń. Zaczynają się od __ (podwójny podkreślnik).

Główne magiczne metody:

  • __construct(): Wywoływana podczas tworzenia nowej instancji klasy. Służy do inicjalizacji obiektu.
  • __destruct(): Wywoływana podczas usuwania obiektu lub końca skryptu. Służy do zwalniania zasobów.
  • __call(string $name, array $arguments): Wywoływana podczas próby wywołania niedostępnej lub nieistniejącej metody.
  • __callStatic(string $name, array $arguments): Wywoływana podczas próby wywołania niedostępnej lub nieistniejącej metody statycznej.
  • __get(string $name): Wywoływana podczas próby dostępu do niedostępnej lub nieistniejącej właściwości.
  • __set(string $name, mixed $value): Wywoływana podczas próby ustawienia wartości niedostępnej lub nieistniejącej właściwości.
  • __isset(string $name): Wywoływana podczas użycia isset() lub empty() na niedostępnej lub nieistniejącej właściwości.
  • __unset(string $name): Wywoływana podczas użycia unset() na niedostępnej lub nieistniejącej właściwości.
  • __serialize(): Wywoływana przed serializacją obiektu za pomocą serialize(). Zwraca tablicę właściwości do serializacji.
  • __unserialize(array $data): Wywoływana podczas deserializacji obiektu za pomocą unserialize(). Otrzymuje tablicę danych do przywrócenia właściwości.
  • __toString(): Pozwala traktować obiekt jako ciąg znaków. Wywoływana podczas próby wyświetlenia obiektu jako ciągu (np. za pomocą echo). Powinna zwracać ciąg znaków.
  • __invoke(...$arguments): Pozwala traktować obiekt jako funkcję. Wywoływana podczas próby wywołania obiektu jako funkcji.
  • __set_state(array $properties): Wywoływana podczas przywracania obiektu za pomocą var_export(). Otrzymuje tablicę właściwości obiektu.
  • __debugInfo(): Wywoływana podczas użycia var_dump() na obiekcie. Powinna zwracać tablicę z informacjami do debugowania.

Przykład użycia __construct i __toString:

<?php
class MyClass {
    private $name;

    public function __construct(string $name) {
        $this->name = $name;
    }

    public function __toString(): string {
        return "Obiekt o nazwie: " . $this->name;
    }
}

$obj = new MyClass("Test");
echo $obj; // Wywoła __toString()

Przykład użycia __get i __set:

<?php
class MyClass {
    private $data = [];

    public function __set(string $name, mixed $value): void {
        $this->data[$name] = $value;
    }

    public function __get(string $name): mixed {
        if (array_key_exists($name, $this->data)) {
            return $this->data[$name];
        }
        return null; // Lub rzucić wyjątek
    }
}

$obj = new MyClass();
$obj->prop1 = "Wartość 1"; // Wywoła __set()
echo $obj->prop1; // Wywoła __get()