Магические методы - это предопределенные методы, выполняемые при событии, без вызова функции, начинающиеся с двойного подчеркивания.
Так получилось что в ООП функции называют — методами а переменные — свойствами.
__construct() — метод конструктор, если он объявлен в классе то он будет вызываться при каждом создании объекта. Может принимать одно или несколько свойств.
__destruct() — деструктор вызывается при освобождении всех ссылок на объект в котором он находится или по завершению работы скрипта. Не может принимать свойства.
__get() — будет выполнен при чтении данных из недоступных свойств.
__set() — будет выполнен при записи данных в недоступные свойства.
__isset() — будет выполнен при использовании isset() или empty() на недоступных свойствах.
__unset() — будет выполнен при вызове unset() на недоступном свойстве.
__toString() — позволяет написать реакцию класса при возведении его в строку.
__invoke() — вызывается когда скрипт выполняет объект как функцию.
class Test { public $name; public $colors=array();
public function __construct($name) { # Свойству класса name теперь равно переданному при создании класса значию $this->name=$name; return 1; } public function __set($name,$value) { # Ловим несуществующее свойство и его значение и отправляем их в массив $this->colors[$name]=$value; return 1; } public function __get($name) { # Достаем ранее записанное методом __set() в массив несуществующее свойство return $this->colors[$name]; } public function __toString() { # Обязательное условие - должна выводится именно строка return $this->name; } public function __invoke($x) { # Обрабатываем значение переданное объекту как функции echo "Число состоит из ".strlen($x)."-х символовn"; } public function __destruct() { # Перед уничтожением класса из памяти он может дать о себе знать print 'Привет я класс '.__class__.' примерно через 0.00001 секунды я буду уничтожен'; } }
# Создаем объект значение свойства будет переданно в метод __construct() $obj=new Test('AndreRoux'); echo $obj->name."n";
# Выводим сам объект если метод __toString() не контролирует это действие то мы получаем E_RECOVERABLE_ERROR echo $obj."n";
# Обращаемся к объекту как к функции $obj(2134);
# Даем значение несуществующему свойству, далее если оно действительно # не существует за его обработку принимается функция __set() $obj->color='red'; # Выводим несуществующее свойство echo $obj->color."n";