Junior
Кои магически методи на класове знаете?
sobes.tech AI
Отговор от 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()