Sobes.tech
Junior
151
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()