Магические методы в 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(...): Вызывается, когда объект пытаются использовать как функцию.__set_state(array $properties): Вызывается при создании объекта с помощью функции var_export().__clone(): Вызывается, когда объект клонируется с использованием ключевого слова clone. Используется для настройки клонированного объекта.__debugInfo(): Настраивает вывод отладочной информации для объекта, когда он используется с функциями типа var_dump().Пример использования __get() и __set():
php
Магические методы предоставляют механизм для перехвата и управления определенными операциями с объектами, позволяя создавать более гибкие и динамические классы. Однако их чрезмерное использование может усложнить чтение и отладку кода.