|
Магические методыИмена методов __construct(), __destruct(), __call(), __callStatic(), __get(), __set(), __isset(), __unset(), __sleep(), __wakeup(), __toString(), __invoke(), __set_state() and __clone() зарезервированы для "магических" методов в PHP. Не стоит называть свои методы этими именами, если вы не хотите использовать их "магическую" функциональность. Предостережение
PHP оставляет за собой право все методы, начинающиеся с __, считать "магическими". Не рекомендуется использовать имена методов с __ в PHP, если вы не желаете использовать соответствующий "магический" функционал. __sleep() и __wakeup()
public array __sleep
( void
)
void __wakeup
( void
)
Функция serialize() проверяет, присутствует ли в вашем классе метод с "магическим" именем __sleep(). Если это так, то этот метод выполняется прежде любой операции сериализации. Он может очистить объект и предполагается, что будет возвращен массив с именами всех переменных объекта, который должен быть сериализован. Если метод ничего не возвращает кроме NULL, то это значит, что объект сериализован и выдается предупреждение E_NOTICE.
Рекомендованное использование __sleep() состоит в завершении работы над данными, ждущими обработки или других подобных задач очистки. Кроме того, этот метод можно выполнять в тех случаях, когда нет необходимости сохранять полностью очень большие объекты. С другой стороны, функция unserialize() проверяет наличие метода с "магическим" именем __wakeup(). Если такой имеется, то он может воссоздать все ресурсы объекта, принадлежавшие ему. Обычно __wakeup() используется для восстановления любых соединений с базой данных, которые могли быть потеряны во время операции сериализации и выполнения других операций повторной инициализации. Пример #1 Sleep и wakeup
<?php __toString()
public string __toString
( void
)
Метод __toString() позволяет классу решать самостоятельно, как он должен реагировать при преобразовании в строку. Например, что напечатает echo $obj;. Этот метод должен возвращать строку, иначе выдастся неисправимая ошибка E_RECOVERABLE_ERROR. Пример #2 Простой пример
<?php Результат выполнения данного примера: Привет Ранее, до PHP 5.2.0, метод __toString() вызывался только непосредственно в сочетании с функциями echo() или print(). Начиная с PHP 5.2.0, он вызывается в любом строчном контексте (например, в printf() с модификатором %s), но не в контекстах других типов (например, с %d модификатором). Начиная с PHP 5.2.0, преобразование объекта в строку при отсутствии метода __toString() вызывает ошибку E_RECOVERABLE_ERROR. __invoke()Метод __invoke() вызывается, когда скрипт пытается выполнить объект как функцию.
Пример #3 Использование __invoke()
<?php Результат выполнения данного примера: int(5) bool(true) __set_state()
static object __set_state
( array $properties
)
Этот статический метод вызывается для тех классов, которые экспортируются функцией var_export() начиная с PHP 5.1.0. Параметр этого метода должен содержать массив, состоящий из экспортируемых свойств в виде array('property' => value, ...). Пример #4 Использование __set_state() (начиная с PHP 5.1.0)
<?php Результат выполнения данного примера: object(A)#2 (2) { ["var1"]=> int(5) ["var2"]=> string(3) "foo" } |
|