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życiaisset()lubempty()na niedostępnej lub nieistniejącej właściwości.__unset(string $name): Wywoływana podczas użyciaunset()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życiavar_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()