В PHP4 уже есть синтаксис перегрузки для установления сопоставлений с внешними объектными моделями, так же как в Java и COM реализована мощная объектно-ориентированная перегрузка, позволяющая программистам создавать собственные варианты поведения для доступа к свойствам и вызовам методов.
Перегрузка может выполняться с помощью нескольких специальных методов __get. __set и __call. Когда механизм Zend пытается получить доступ к элементу и не может его найти, PHP вызывает эти методы.
В примере на рисунке 1 __get и __set заменяют весь доступ к массиву переменных-атрибутов. При необходимости вы можете это сделать. реализовать любой тип фильтрации, который вы хотите. Например, сценарий может отключить установку значений атрибутов, начинать с определенного префикса или включать определенный тип значения.
Метод __call показывает, как можно вызывать неопределенный метод. , имя метода и параметры, полученные методом, будут переданы методу __call, а PHP передает значение __call обратно в неопределенный метод
перегрузки уровня пользователя
<?php
.
класс Перегрузчик
{
частные $properties = массив()
функция __get($property_name)
{
if(isset($this->properties[$property_name]))
{
return($this->properties[$property_name]);
}
еще
{
возврат (NULL);
}
}
функция __set($имя_свойства, $значение)
{
$this->properties[$property_name] = $value;
}
функция __call($имя_функции, $args)
{
print("Вызов $function_name()n");
print("Аргументы: ");
print_r ($ args);
возврат (ИСТИНА);
}
}
$o = new Overloader();
// вызов __set() присваивает значение несуществующей переменной атрибута и активирует __set()
$o->dynaProp = "Динамический контент"
// вызываем __get() активируем __get();
print($o->dynaProp . "n");
//вызов __call(), активация __call());
$o->dynaMethod("Леон", "Зеев");
?>
Автозагрузка классов
Когда вы пытаетесь использовать неопределенный класс, PHP сообщает о фатальной ошибке. Решение состоит в том, чтобы добавить класс, который можно включить в файл. Однако вы знаете, какой класс использовать. Предоставляет функцию автоматической загрузки классов, которая позволяет сэкономить время программирования. Когда вы пытаетесь использовать класс, который PHP не организовал, он будет искать глобальную функцию __autoload. Если эта функция существует, PHP вызовет ее с параметром . Параметр — имя класса.
Пример На рисунке 2 показано, как используется __autoload. Предполагается, что каждый файл в текущем каталоге соответствует классу. Когда сценарий пытается создать экземпляр класса User, PHP выполнит __autoload. Класс User определен в class_User.php. Независимо от того, указан ли вызов в верхнем или нижнем регистре, PHP вернет имя класса в нижнем регистре
<
?php.
//определяем функцию автозагрузки
функция __autoload($класс)
{
include("class_" . ucfirst($class). ".php");
}
//используем класс, который должен загружаться автоматически
$u = новый пользователь;
$u->name = "Леон";
$u->printName();
?>