Магические методы в PHP - это специальные методы, начинающиеся с двойного подчеркивания (например, __construct), которые автоматически вызываются в определенных ситуациях.
Основные магические методы и их использование:
__construct(): Вызывается при создании объекта класса. Используется для инициализации свойств объекта и выполнения начальных действий.
php
__destruct(): Вызывается при уничтожении объекта (например, когда скрипт завершается или объект удаляется из памяти). Используется для освобождения ресурсов (закрытие файлов, соединений с базами данных).
php
__call(string $name, array $arguments): Вызывается при попытке вызвать недоступный или несуществующий метод в контексте объекта. $name содержит имя метода, а $arguments - массив аргументов.
php
__callStatic(string $name, array $arguments): Вызывается при попытке вызвать недоступный или несуществующий статический метод в контексте класса. Аналогичен __call, но для статических вызовов.
php
__get(string $name): Вызывается при попытке получить значение недоступного или несуществующего свойства в контексте объекта. $name содержит имя свойства.
php
__set(string $name, mixed $value): Вызывается при попытке установить значение недоступного или несуществующего свойства в контексте объекта. $name содержит имя свойства, а $value - устанавливаемое значение.
php
__isset(string $name): Вызывается при вызове isset() или empty() на недоступном или несуществующем свойстве в контексте объекта. Возвращает булево значение.
php
__unset(string $name): Вызывается при вызове unset() на недоступном или несуществующем свойстве в контексте объекта.
php
__sleep(): Вызывается перед сериализацией объекта с использованием serialize(). Должен вернуть массив имен свойств, которые необходимо сериализовать.
php
__wakeup(): Вызывается после десериализации объекта с использованием unserialize(). Используется для восстановления соединений с базами данных или других действий, необходимых после восстановления объекта.
php
__toString(): Вызывается, когда объект используется как строка (например, при echo или конкатенации). Должен вернуть строковое представление объекта.
php
__invoke(...): Вызывается при попытке вызвать объект как функцию. Может принимать любое количество аргументов.
php
__set_state(array $properties): Вызывается статически для классов экспортированных с помощью var_export(). Получает массив экспортированных свойств. Должен создать новый объект класса и вернуть его.
php
__debugInfo(): Вызывается при вызове функций типа var_dump() для объекта. Метод должен возвращать массив с информацией о свойствах объекта, которые должны быть отображены.
php
__clone(): Вызывается после операции клонирования (clone) объекта. Используется для глубокого копирования внутренних объектов или структур данных.
php
Таблица с кратким описанием:
| Метод | Описание | Вызывается при... |
|---|---|---|
__construct() | Конструктор класса. | Создании нового экземпляра класса. |
__destruct() | Деструктор класса. | Удалении объекта или завершении скрипта. |
__call() | Обработка вызова несуществующих/недоступных методов объекта. | Попытке вызова недоступного или несуществующего метода объекта. |
__callStatic() | Обработка вызова несуществующих/недоступных статических методов. | Попытке вызова недоступного или несуществующего статического метода класса. |
__get() | Обработка получения значения несуществующих/недоступных свойств. | Попытке получения значения недоступного или несуществующего свойства объекта. |
__set() | Обработка установки значения несуществующих/недоступных свойств. | Попытке установки значения недоступного или несуществующего свойства объекта. |
__isset() | Обработка isset() или empty() для свойств. | Вызове isset() или empty() на недоступном или несуществующем свойстве объекта. |
__unset() | Обработка unset() для свойств. | Вызове unset() на недоступном или несуществующем свойстве объекта. |
__sleep() | Подготовка к сериализации. | Вызове serialize() для объекта. |
__wakeup() | Постобработка после десериализации. | Вызове unserialize() для объекта. |
__toString() | Строковое представление объекта. | Использовании объекта в строковом контексте (например, echo). |
__invoke() | Вызов объекта как функции. | Попытке вызова объекта как функции. |
__set_state() | Создание объекта после экспорта с var_export(). | Оценке кода, созданного var_export(). |
__debugInfo() | Информация для отладочных функций (var_dump()). | Вызове var_dump() для объекта. |
__clone() | Постобработка после клонирования. | Вызове clone для объекта. |