|
|||||||||
|
|||||||||
Магические методыИмена методов __construct, __destruct (см. Конструкторы и деструкторы), __call, __callStatic, __get, __set, __isset, __unset (см. Перегрузка), __sleep, __wakeup, __toString, __set_state и __clone зарезервированы для "магических" методов в PHP. Не стоит называть свои методы этими именами, если вы не хотите использовать их "магическую" функциональность. Предостережение
PHP оставляет за собой право все методы, начинающиеся с __, считать "магическими". Не рекомендуется использовать имена методов с __ в PHP, если вы не желаете использовать соответствующий "магический" функционал. __sleep и __wakeupФункция serialize() проверяет, присутствует ли в вашем классе метод с "магическим" именем __sleep. Если это так, то этот метод выполняется прежде любой операции сериализации. Он может очистить объект и предполагается, что будет возвращен массив с именами всех переменных объекта, который должен быть сериализован. Если метод ничего не возвращает кроме NULL, то это значит, что объект сериализован и выдается предупреждение E_NOTICE. Обычно __sleep используется для передачи ожидаемых данных или для выполнения обычных задач их очистки. Также, этот метод можно выполнять в тех случаях, когда вы не хотите сохранять очень большие объекты полностью. С другой стороны, функция unserialize() проверяет наличие метода с "магическим" именем __wakeup. Если такой имеется, то он может воссоздать все ресурсы объекта, которые тот имеет. Обычно __wakeup используется для восстановления любых соединений с базой данных, которые могли быть потеряны во время операции сериализации и выполнения других операций повторной инициализации. Пример #1 Sleep и wakeup
<?php__toStringМетод __toString позволяет классу решать самостоятельно, как он должен реагировать при преобразовании в строку. Пример #2 Простой пример
<?phpРезультат выполнения данного примера:
Ранее, до PHP 5.2.0, метод __toString вызывался только непосредственно в сочетании с функциями echo() или print(). Начиная с PHP 5.2.0, он вызывается в любом строчном контексте (например, в printf() с модификатором %s), но не в контекстах других типов (например, с %d модификатором). Начиная с PHP 5.2.0, преобразование объекта в строку при отсутствии метода __toString вызывает ошибку E_RECOVERABLE_ERROR. __set_stateЭтот статический метод вызывается для тех классов, которые экспортируются функцией var_export() начиная с PHP 5.1.0. Параметр этого метода должен содержать массив, состоящий из экспортируемых свойств в виде array('property' => value, ...). Пример #3 Использование __set_state (начиная с PHP 5.1.0)
<?phpРезультат выполнения данного примера:
| |||||||||
|
|||||||||