|
ПерегрузкаПерегрузка в PHP означает возможность динамически "создавать" свойства и методы. Эти динамические сущности обрабатываются с помощью "волшебных" методов, которые можно создать в классе для различных видов действий. Методы перегрузки вызываются при взаимодействии с теми свойствами или методами, которые не были объявлены или не видны в текущей области видимости. Далее в этом разделе мы будем использовать термины "недоступные свойства" или "недоступные методы" для отражения этой комбинации объявления и области видимости. Все методы перегрузки должны быть объявлены как public.
Список изменений
Перегрузка свойств
public bool __isset
( string $name
)
public void __unset
( string $name
)
Метод __set() будет выполнен при записи данных в недоступные свойства. Метод __get() будет выполнен при чтении данных из недоступных свойств. Метод __isset() будет выполнен при использовании isset() или empty() на недоступных свойствах. Метод __unset() будет выполнен при вызове unset() на недоступном свойстве. Аргумент $name представляет собой имя вызываемого свойства. Метод __set() содержит аргумент $value, представляющий собой значение, которое будет записано в свойство с именем $name. Перегрузка свойств работает только в контексте объекта. Данные магические методы не будут вызваны в статическом контексте. Поэтому данные методы не должны объявляться статичными. Начиная с версии PHP 5.3.0, при объявлении "волшебного" метода в качестве static будет показано предупреждение.
Пример #1 Перегрузка свойств с помощью методов __get(), __set(), __isset() и __unset()
<?php Результат выполнения данного примера: Установка 'a' в '1' Получение 'a' 1 Установлено ли 'a'? bool(true) Уничтожение 'a' Установлено ли 'a'? bool(false) 1 Давайте поэкспериментируем с private свойством 'hidden': Private свойства видны внутри класса, поэтому __get() не используется... 2 Private свойства не видны вне класса, поэтому __get() используется... Получение 'hidden' Notice: Неопределенное свойство в __get(): hidden в файле <file> на строке 70 в <file> на строке 29 Перегрузка методовВ контексте объекта при вызове недоступных методов вызывается метод __call(). В статическом контексте при вызове недоступных методов вызывается метод __callStatic(). Аргумент $name представляет собой имя вызываемого метода. Аргумент $arguments представляет собой числовой массив, содержащий параметры, переданные в вызываемый метод $name. Пример #2 Перегрузка методов с помощью методов __call() и __callStatic()
<?php Результат выполнения данного примера: Вызов метода 'runTest' в контексте объекта Вызов статического метода 'runTest' в статическом контексте |
|||||||