Ответ
Магические методы в PHP — это специальные методы, имена которых начинаются с двойного подчёркивания (__). Они предоставляют разработчику возможность перехватывать и определять поведение объекта при выполнении над ним определённых операций, которые иначе были бы невозможны или требовали бы дополнительного кода.
Наиболее часто используемые магические методы:
__construct(): Вызывается автоматически при создании нового объекта (конструктор).__destruct(): Вызывается при уничтожении объекта (деструктор), полезен для освобождения ресурсов.__get(string $name): Срабатывает при чтении данных из недоступных (protected/private) или несуществующих свойств.__set(string $name, $value): Срабатывает при записи данных в недоступные или несуществующие свойства.__isset(string $name): Срабатывает при вызовеisset()илиempty()на недоступном свойстве.__unset(string $name): Срабатывает при вызовеunset()на недоступном свойстве.__toString(): Вызывается при попытке преобразовать объект в строку (например,echo $obj;).__invoke(...$args): Позволяет использовать объект как функцию.
Практический пример — реализация динамических свойств:
class Config {
private $storage = [];
public function __set($name, $value) {
$this->storage[$name] = $value;
}
public function __get($name) {
return $this->storage[$name] ?? null;
}
public function __isset($name) {
return isset($this->storage[$name]);
}
}
$config = new Config();
$config->dbHost = 'localhost'; // Вызовет __set
echo $config->dbHost; // Вызовет __get, выведет 'localhost'
var_dump(isset($config->dbHost)); // Вызовет __isset, выведет bool(true)
Важно: Злоупотребление магическими методами, особенно __get/__set, может снизить читаемость кода и производительность, а также затруднить статический анализ. Их следует использовать осознанно, например, для создания прокси-объектов или реализации паттерна Active Record.
Видео-ответы
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶