Что такое магические методы PHP?

Список магических методов PHP:

__construct

__destruct

__call

__callStatic

__get

__set

__isset

__unset

__sleep

__wakeup

__toString

__invoke

__set_state

__clone

__debugInfo

__construct — конструктор, этот метод вызывается при создании объекта.

Пример:

<?php


class MyClass {
     function __construct() {
         print "Конструктор класса MyClass\n";
     }
}

new MyClass(); // выведет Конструктор класса MyClass
<?php

class 
MyClass {

    private $variable;


    public function __construct($variable) {
        
$this->variable $variable;
    }

}

// При инициализации объекта, "I'm inside" с помощью конструктора
// присвоится приватному свойству private $variable
new MyClass('I'm inside');

__destruct — деструктор, этот метод вызывается при удалении объекта.

__call() — запускается при вызове недоступных методов в объекте. Т.е. если вы обращаетесь к методу объекта, которого не существует, то запускается метод __call()

__callStatic — запускается при вызове недоступных методов у класса. Т.е. если вы обращаетесь к статическому методу класса, а его не существует, то вызывается метод __callStatic().

__get — запускается при попытке чтения несуществующих, приватных или защищенных свойств объекта.

__set — запускается при попытке записи данных в несуществующие, приватные или защищенные свойства объекта.

__isset — будет запущен, при попытке использовать метод isset()(проверяет существует ли переменная или свойство), на несуществующем, защищенном или приватном свойстве объекта.

__unset — запускается при попытке использования unset(), на несуществующем, защищенном или приватном свойстве объекта.

__sleep — данный магический метод запускается до любой операции сериализации. может использоваться, например для очистки объекта.

__wakeup — этот магический метод запускается до выполнения функции unserialize(). Используется для восстановления различных ресурсов, которые может иметь объект.

__toString — этот магический метод делает следующее — если объект попытаются использовать как строку, то запустится метод __toString. 

Пример:

<?php
// Объявление класса
class MyClass
{
   public $variable;

   public function __construct($variable)
    {
       $this->variable= $variable;
    }

    public function __toString()
    {
       return $this->variable;
    }
}

$object = new MyClass('Hi from object');

echo $object ; // пытаемся ECHO-м вывести на экран объект, в результате
// запускается магический метод __toString, который возвращает строку
// "Hi from object", и выводится на экран "Hi from object".

__invoke — магический метод, вызывается, если объект пытаются вызвать как функцию.

Пример:

<?php
class MyClass
{
   public function __invoke($var)
    {
       var_dump($var);
    }
}
$object = new MyClass;
$object(60); // т.к. объект пытаются использовать как функцию,
// то запускается магический метод __invoke

__set_state — этот магический метод покрыт ореолом тайны, но его не просто так разместили сразу после магического метода __toString, т.к. метод их запуска очень похож. Метод __toString запускается, если объект пытаются передать в функцию ECHO — (пример — echo($itObject);), а магический метод __set_state запускается если Ваш объект пытаются передать в функцию VAR_EXPORT (пример — var_export($itObject);). Область применения метода __set_state довольно обширна, например для отладки кода.

__clone — магический метод, срабатывает после завершения клонирования объекта.

$clone_your_object = clone $your_object; //После такого клонирования, 
//если определен магический метод __clone, он будет запущен.

__debugInfo — этот метод запускается, если в функцию var_dump(), передать объект. Если у объекта, магический метод __debugInfo не определен, то будут показаны все свойства объекта.