Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Что такое «волшебные» методы (magic methods)?

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1] 

> Описание: Урок о служебных методах
ALEN
Отправлено: 06 Марта, 2011 - 20:37:54
Post Id



Участник


Покинул форум
Сообщений всего: 1459
Дата рег-ции: Авг. 2008  
Откуда: Крым


Помог: 11 раз(а)




Это методы, которые имеют особое значение, потому как их вызываете не вы, а PHP в определенные моменты. Чтобы не контролировать наступление этих моментов и не вызывать функции вручную вы можете добавлять к своим классам «магические» методы и быть уверенным в том что они будут вызваны автоматически. Все «магические» методы начинаются с двойного символа подчеркивания __ и являются методами объекта (не static), кроме двух: __callStatic и __set_state.
Перечислим их все:


void __construct(mixed $arg1[, mixed $arg2[, ...]])
Когда: Вызывается при создании экземпляра объекта. Имеет входное количество параметров таким каким его задаст пользователь, т.е. вы.

void __destruct()
Когда: в момент когда объект подвергается сборке мусора. Т.е. завершает своё существование.

mixed __get(string $name)
Когда: при попытке запросить свойство объекта, которого он не имеет (или недоступному из за private/protected модификатора). Именно имя этого несуществующего свойства он и передаст в качестве первого параметра. А что с этим делать – ваша забота.

void __set (string $name, mixed $value)
Когда: запустится, если вы попытаетесь несуществующему (или недоступному из-за private/protected модификатора) свойству присвоить какое-либо значение. В функцию будут переданы имя этого свойства и значение, которое ему пытались установить.

mixed __call (string $name, array $args)
Когда: вызовется, если у объекта была попытка выполнить несуществующий метод. Первым параметром будет имя этого метода, а вторым будет массив входных параметров, которые пытались этой функции передать.

mixed __callStatic (string $name, array $args)
Когда: аналогично __call, но работает с несуществующими статическими методами, т.е. методами которые были вызваны через синтаксис ИмяКласса::ИмяМетода, но не были найдены в классе.

string __toString ()
Когда: вызывается, когда объект пытаются использовать как строку, например, в случае если вы хотите вывести объект через echo. Объект будет представлен как строка, так как вы захотите – он будет представлен тем, что будет возвращено этим методом, т.е. return обязателен.

void __clone ()
Когда: после клонирования объекта оператором clone. Внутри этого метода вы можете использовать $this, чтобы изменить клон который создается.
Зачем: Если в классе используются объекты, то обычное клонирование скопирует лишь ссылки на них, и новых экземпляр будет привязан к данным которые находятся не только внутри него, но и в том объекте из которого он клонировался. Выход - клонировать необходимое вручную внутри __clone

bool __isset (string $name)
Когда: сработает при проверке с помощью isset() несуществующих свойств у данного объекта.

void __unset (string $name)
Когда: вызовется, когда применяют функцию unset() на несуществующем свойстве класса. Принимает в качестве первого параметра имя этого свойства.

object __set_state (array $properties)
Когда: внутри вызова var_export(), первым параметром принимает свойства объекта которые собирается сохранить система. Если сделать eval полученного кода, вызовется эта функция - а дальше сами думайте зачем оно вам надо

mixed __invoke (mixed $arg1[, mixed $arg2[, ...]])
Когда: вызывается, когда объект используется в стиле функции. В метод __invoke передаются все параметры, которые вы передали, используя объект в качестве функции. Но они передадутся не в одном первом аргументе, а в обычном виде. Чтобы получить параметры в массиве можно, конечно же, воспользоваться функцией func_get_args()

array __sleep ()
Когда: вызывается внутри функции serialize и определяет какие члены объекта надо сохранить, для этого вы должны вернуть массив содержащий строки-имена членов которые должны быть записаны.

void __wakeup ()
Когда: вызывается когда метод "просыпается" десериализацией внутри unserialize
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Уроки php »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB