ТОП-10 популярных



Для работы с вещественными числами в MySQL предусмотрено три типа данных - это типы FLOAT, DOUBLE, DECIMAL. Числовой тип FLOAT...

НОУТБУК с блестящим экраном
Eсли выпустившая ноутбук фирма предлагает его в качестве «замены настольному ПК», то это должно подразумевать под собой нечто большее, чем...

БОЛЬШЕ БОЛЬШИХ LCD-мониторов
Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...

Больше больших LCD-мониторов
Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...

Магнито-оптический дисковод DynaMO
Cейчас, когда традиционные флоппи-дисководы на долгие годы замерли в своем развитии, поиск альтернативных носителей продолжается, и ситуация, казалось бы, разрешилась...

Иди и пиши. TravelMate C100
Планшетный компьютер платформы Tablet PC обязан в первую очередь быть легким, способным достаточно долго работать без подзарядки батарей. Эти требования...

ПОД ЛИТЕРОЙ «N»
Aтаку LCD-мониторов не остановить, а масштабы этого наступления даже немного пугают. Судите сами — многие пользователи только начинают приглядываться к новому для...


Для длинных строк, т.е. строк длиннее 255 символов, в MySQL предусмотрены типы BLOB (Binary Large Object, большой двоичный объект) и...

Размер объему не помеха.
С тех пор как компания Fujitsu отказалась от производства жестких дисков для настольных компьютеров, многие пользователи начали забывать о том,...


Какую только информацию мы не помещаем на компакт-диски: резервные копии важных данных, музыку, фильмы... Многие полагают, что главное - «купить...

PHP. Классы и объекты. Часть Одиннадцатая.


28-12-2009

6.11. Перезагрузка на пользовательском уровне
В PHP 4 для разработчиков модулей была добавлена возможность перезагружать объектно-ориентированный синтаксис и создавать распределения во внешние объектные модели, созданные с помощью Java или COM. PHP 5 позволяет применять объектно-ориентированную перезагрузку для разработчиков PHP и предоставляет им возможность создавать настраиваемое поведение для доступа к свойствам и вызовам методов. Перезагрузка на пользовательском уровне осуществляется при определении одного или нескольких следующих методов: __get, __set и __call. PHP вызывает эти методы в том случае, если процессор Zend Engine делает попытку доступа к элементу, но не находит его в текущем диапазоне.
В листинге 6.14 методы_get и_set получают доступ ко всем свойствам массива
properties. По мере необходимости можно применить любой нужный фильтр. Например, этот сценарий может запретить установку свойств, которые начинаются с определенного префикса или содержат определенный тип значений.
Метод_call иллюстрирует, каким образом можно перехватить обращения к не­определенным методам. При этом будут получены имя метода и массив, содержащий список аргументов метода. PHP возвращает значение __call как возвращаемое значение ненайденного метода.

Листинг 6.14. Перезагрузка на пользовательском уровне

<?php
class Overloader
{
private $properties = array(); function __get($property_name)
{
if(isset($this->properties[$property_name]))
{
return($this->properties[$property_name]);
}
else
{
return(NULL);
}
}
function __set($property_name, $value)
{
$this->properties[$property_name] = $value;
}
function __call($function_name, $args)
{
print("Вызов $function_name()<br>n"); print("Аргументы: "); print_r($args); return(TRUE);
}
}
$o = new Overloader(); // вызвать __set()
$o->dynaProp = "Dynamic Content"; // вызвать __get() print($o->dynaProp . "<br>n"); // вызвать __call() $o->dynaMethod("Leon", "Zeev");
?> 

6.12. Автозагрузка класса
При попытке использования еще не определенного класса PHP выдает фатальную ошибку. Очевидным решением в такой ситуации является добавление определения класса с помощью оператора include. После всего необходимо знать, какие классы использует в своей работе сценарий. Однако PHP имеет возможность автозагрузки классов, что позволяет экономить время на программировании. При попытке использования класса, который PHP не может распознать, он осуществляет поиск глобальной функции __autoload. Если она существует, PHP вызывает ее с единственным параметром, представляющим собой имя класса. Внутри функции можно предпринять все действия, необходимые для создания класса.
В примере, представленном в листинге 6.15, продемонстрировано использование функции __autoload. При этом используется упрощенная схема, предполагающая соответствие файлов текущего каталога любому классу. Когда сценарий делает попытку получить экземпляр User, PHP выполняет функцию_autoload. Это делается
в предположении, что модуль class_User.php содержит объявление класса. Независимо от того, какой регистр используется для активизации класса, PHP возвращает имя в нижнем регистре.

| Листинг 6.15. Автозагрузка класса_
<?php
//определение функции автозагрузки function __autoload($class)
{
include("class_" . ucfirst($class) . ".php");
}
//использовать класс, который будет загружаться автоматически $u = new User; $u->name = "Leon"; $u->printName();
?>

Понравился материал? Поделитесь с друзьями!



<< Предыдущая статьяСледующая статья >>
PHP. Классы и объекты. Часть Десятая. PHP. Классы и объекты. Часть Двеннадцатая.