В дословном переводе — Магические Методы (Magic Methods). Эти методы зарезирвированы в php. Они начинаются с двойного подчеркивания (__).
Список всех Магических методов:
* __construct
* __destruct
* __call
* __callStatic
* __get
* __set
* __isset
* __unset
* __sleep
* __wakeup
* __toString
* __set_state
* __clone
Основные и наиболее используемые методы - это __construct, __destruct, конструктор и деструктор. С ними понятно.
Существуют также __call, __get, __set.
Эти методы связанны с перегрузкой, т.е. мы можем выполнить к примеру такой метод $object->setValue(30) даже если он фактически отсутствует. Во время выполнения управление будет отдано методу __call:
function __call($m, $a) {
...
}
где $m = ‘getValue’, а $a = 30.__get и __set выполняют похожие операции, но не с методами, а со свойствами класса.
__sleep и __wakeup вызываются только из функций serialize и unserialize.
__sleep до выполнения команды serialize над данным объектом, она возвращает имена переменных, которые нужно сериализовать.
__wakeup в свою очередь - до выполнения команды unserialize.
__toString
При обращении к классу как к строке, PHP возвращает ошибку:
$class = new TestClass('Привет');
echo $class;
Можно для этой цели создать магический метод __toString в нужном классе.class TestClass {
public $foo;
public function __construct($foo) {
$this->foo = $foo;
}
public function __toString() {
return $this->foo;
}
}
__cloneТакже есть метод __clone, он вызывается только при клонировании объекта с помощью оператора clone. При отсутствии этого метода, он подставится автоматически и скопирует все свойства объекта в новый. Можно самостоятельно написать метод __clone и таким образом самому определить, какие свойства будут переданы в объект-клон.