Назад к вопросам
Junior
146
questionbank
Что такое магические методы в PHP?
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech 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
?>