Sobes.tech
Junior

Кои магически методи на класа знаете?

sobes.tech AI

Отговор от AI

В PHP има редица специални методи, наречени "магически". Те се извикват автоматично при определени действия с обекти на клас. Ето някои от тях:

  • __construct(): Извиква се при създаване на нов екземпляр на класа. Използва се за инициализация на обекта.
  • __destruct(): Извиква се при унищожаване на обекта (например при приключване на изпълнението на скрипта или при явно извикване на unset()). Използва се за освобождаване на ресурси.
  • __call($name, $arguments): Извиква се при опит да се извика недостъпна (невидима в текущия контекст) метод на обекта. $name е името на извикания метод, $arguments е масивът му от аргументи.
  • __callStatic($name, $arguments): Подобен на __call(), но се извиква при опит да се извика недостъпен статичен метод.
  • __get($name): Извиква се при опит за четене на недостъпна собственост на обекта. $name е името на собствеността.
  • __set($name, $value): Извиква се при опит за запис в недостъпна собственост на обекта. $name е името на собствеността, $value е стойността, която се присвоява.
  • __isset($name): Извиква се при проверка дали недостъпна собственост съществува чрез isset() или empty(). $name е името на собствеността.
  • __unset($name): Извиква се при опит да се изтрие недостъпна собственост чрез unset(). $name е името на собствеността.
  • __sleep(): Извиква се преди сериализацията на обекта чрез serialize(). Трябва да върне масив с имената на свойствата, които трябва да бъдат сериализирани.
  • __wakeup(): Извиква се веднага след десериализацията на обекта чрез unserialize(). Може да се използва за възстановяване на връзки или ресурси.
  • __toString(): Извиква се при опит да се преобразува обект в низ (например при извеждане с echo). Трябва да върне низово представяне на обекта.
  • __invoke(...$args): Извиква се при опит да се използва обект като функция.
  • __set_state(array $properties): Извиква се при възстановяване на обект с var_export(). Получава масив с експортираните свойства.
  • __clone(): Извиква се при клониране на обект с clone. Използва се за дълбоки копия (например, обекти вътре в обект).

Важно е да използвате тези методи с повишено внимание, тъй като неправилната им употреба може да доведе до непредсказуемо поведение на кода.