Junior
152
questionbank
Какие магические методы классов вы знаете?
Ответ от нейросети
sobes.tech AI
Магические методы в PHP — это специальные методы, которые вызываются автоматически при определенных событиях. Они начинаются с __ (двойное подчеркивание).
Основные магические методы:
__construct(): Вызывается при создании нового экземпляра класса. Используется для инициализации объекта.__destruct(): Вызывается при удалении объекта или завершении скрипта. Используется для очистки ресурсов.__call(string $name, array $arguments): Вызывается при попытке вызвать недоступный или несуществующий метод.__callStatic(string $name, array $arguments): Вызывается при попытке вызвать недоступный или несуществующий статический метод.__get(string $name): Вызывается при попытке получить доступ к недоступному или несуществующему свойству.__set(string $name, mixed $value): Вызывается при попытке установить значение недоступному или несуществующему свойству.__isset(string $name): Вызывается при вызовеisset()илиempty()на недоступном или несуществующем свойстве.__unset(string $name): Вызывается при вызовеunset()на недоступном или несуществующем свойстве.__serialize(): Вызывается перед сериализацией объекта с помощьюserialize(). Возвращает массив свойств для сериализации.__unserialize(array $data): Вызывается при десериализации объекта с помощьюunserialize(). Получает массив данных для восстановления свойств.__toString(): Позволяет рассматривать объект как строку. Вызывается при попытке вывести объект как строку (например, с помощьюecho). Должен возвращать строку.__invoke(...$arguments): Позволяет обрабатывать объект как функцию. Вызывается при попытке вызвать объект как функцию.__set_state(array $properties): Вызывается при восстановлении объекта функциейvar_export(). Получает массив свойств объекта.__debugInfo(): Вызывается при вызовеvar_dump()на объекте. Должен возвращать массив с информацией для отладки.
Пример использования __construct и __toString:
<?php
class MyClass {
private $name;
public function __construct(string $name) {
$this->name = $name;
}
public function __toString(): string {
return "Объект с именем: " . $this->name;
}
}
$obj = new MyClass("Тест");
echo $obj; // Вызовет __toString()
Пример использования __get и __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; // Или бросить исключение
}
}
$obj = new MyClass();
$obj->prop1 = "Значение 1"; // Вызовет __set()
echo $obj->prop1; // Вызовет __get()