Junior
Czym są metody magiczne w PHP?
sobes.tech AI
Odpowiedź od AI
Metody magiczne w PHP to specjalne metody, które są wywoływane automatycznie w określonych okolicznościach. Ich nazwy zaczynają się od dwóch podkreśleń (__).
Lista głównych metod magicznych:
__construct(): Wywoływana podczas tworzenia nowego obiektu.__destruct(): Wywoływana podczas niszczenia obiektu.__call($name, $arguments): Wywoływana podczas próby wywołania niedostępnej lub nieistniejącej metody obiektu.__callStatic($name, $arguments): Wywoływana podczas próby wywołania niedostępnej lub nieistniejącej statycznej metody.__get($name): Wywoływana podczas próby pobrania wartości niedostępnej właściwości obiektu.__set($name, $value): Wywoływana podczas próby ustawienia wartości niedostępnej właściwości obiektu.__isset($name): Wywoływana podczas użyciaisset()lubempty()na niedostępnej właściwości.__unset($name): Wywoływana podczas użyciaunset()na niedostępnej właściwości.__sleep(): Wywoływana przed serializacją, zwraca tablicę nazw właściwości do serializacji.__wakeup(): Wywoływana po deserializacji.__toString(): Pozwala obiektowi zachowywać się jak ciąg znaków podczas użycia w kontekście tekstowym.__invoke($args): Wywoływana, gdy skrypt próbuje wywołać obiekt jak funkcję.__set_state(array $properties): Wywoływana podczas eksportu obiektu funkcjąvar_export().__clone(): Wywoływana po zakończeniu klonowania obiektu w celu skonfigurowania klona.__serialize(): Wywoływana podczas serializacji, zwraca tablicę danych do serializacji.__unserialize(array $data): Wywoływana podczas deserializacji, otrzymuje dane z__serialize().
Przykład użycia __construct i __destruct:
<?php
class Example {
public function __construct() {
echo "Obiekt utworzony\n";
}
public function __destruct() {
echo "Obiekt zniszczony\n";
}
}
$obj = new Example();
unset($obj); // Zniszczenie obiektu
?>
Przykład użycia __get i __set:
<?php
class DataStore {
private $data = [];
public function __set($name, $value) {
$this->data[$name] = $value;
}
public function __get($name) {
if (array_key_exists($name, $this->data)) {
return $this->data[$name];
}
return null; // Lub rzucić wyjątek
}
}
$store = new DataStore();
$store->name = "Alice"; // Wywołuje __set
echo $store->name; // Wywołuje __get
?>