Junior
Какви са магическите методи в PHP?
sobes.tech AI
Отговор от AI
Магическите методи в PHP са специални методи, които се извикват автоматично при определени обстоятелства. Техните имена започват с две долни черти (__).
Списък на основните магически методи:
__construct(): Извиква се при създаване на нов обект.__destruct(): Извиква се при унищожаване на обекта.__call($name, $arguments): Извиква се при опит да се извика недостъпна или несъществуваща метод на обекта.__callStatic($name, $arguments): Извиква се при опит да се извика недостъпна или несъществуваща статична метод.__get($name): Извиква се при опит да се получи стойността на недостъпна собственост на обекта.__set($name, $value): Извиква се при опит да се зададе стойността на недостъпна собственост на обекта.__isset($name): Извиква се при използване наisset()илиempty()върху недостъпна собственост.__unset($name): Извиква се при използване наunset()върху недостъпна собственост.__sleep(): Извиква се преди сериализация, връща масив с имената на свойствата за сериализация.__wakeup(): Извиква се след десериализация.__toString(): Позволява на обекта да се държи като низ при използване в низов контекст.__invoke($args): Извиква се, когато скриптът се опитва да извика обекта като функция.__set_state(array $properties): Извиква се при експортиране на обекта с функциятаvar_export().__clone(): Извиква се след завършване на клонирането на обекта за настройка на клона.__serialize(): Извиква се по време на сериализация, връща масив с данни за сериализация.__unserialize(array $data): Извиква се по време на десериализация, получава данните от__serialize().
Примери за използване на __construct и __destruct:
<?php
class Example {
public function __construct() {
echo "Обект създаден\n";
}
public function __destruct() {
echo "Обект унищожен\n";
}
}
$obj = new Example();
unset($obj); // Принудително унищожаване на обекта
?>
Примери за използване на __get и __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; // Или хвърлете изключение
}
}
$store = new DataStore();
$store->name = "Alice"; // Обажда __set
echo $store->name; // Обажда __get
?>