PHP-4 Эффективная работа


Вызов функций по имени
Работа со списком аргументов
Проверка наличия определений функций
Регистрация специальных функций

9.3. Проверка наличия определений функций

В этом разделе мы рассмотрим функции, которые позволяют проверить наличие определения других пользовательских функций. Основное их назначение — реализация контроля конфигурации PHP-машины и внешних библиотек функций.

9.3.1. Наличие определения функции:function_exists

bool function_exists (string function_name)

Ищет функцию с именем f unct i on_name в общем списке определенных в системе функций. Возвращает true, если такая функция найдена, или false, если такой функции нет. При этом речь идет не только о пользовательских функциях, но и о системных, что позволяет эффективно проверять конфигурацию системы и предупреждать пользователя о необходимости перекомпиляции РНР-машины.

Так, приведенный ниже фрагмент проверяет наличие функции imap_open, которая доступна только при компиляции РНР с поддержкой ШАР:
if (function_exists('imap_open')) {
       echo "IMAP функции доступны для работы.<br>\n";
} else {
       echo "IMAP функции в PHP-машине отсутствуют.<br>\n";
}

9.3.2. Список определенных функций:get_defined_functions

array get_defined_functions ()

Функция возвращает многомерный массив, содержащий список всех определенных в системе функций, как встроенных, так и определенных пользователем. При этом встроенные функции помещаются в массив, адресуемый элементом $arr[" internal"],а пользовательские — в массив $аrr["usеr"], как это показано в листинге 9.1.

Рис. 9.3. Получить список всех функций в системе легко и просто.Но разбираться с этим списком вам придется самостоятельно

Листинг 9.1. Список функций, определенных в системе
<HTML>
<ТIТL_Е>Список функций, определенных в системе
<BODY BGCOLOR="#FFFFFF">
<font size=+l>
<?
// Функция для вывода одной строки внутренней таблицы
function myrow($data) {
       echo "<tr><td>$data</td></tr>\n";
}
function print_list($vid) {
       global $arr; // ссылаемся на внешний массив
?>
<table>
<?
     foreach ($arr[$vid] as $key) {
          myrow($key); // Печатаем очередную строку
     }
?>
</table>
<?
}
$arr = get_defined_f unctions () ;

<table border=l>
<tr><th>Bcrpoeнныe функции</th><th> Пользовательские функции</th></tr>

<tr valign=top><td>
       <? print_list("internal") ; ?>
</td><td>
       <? print_list("user") ; ?>
</td>/tr>
</table>
Результат выполнения этой программы приведен на рис. 9.3.

9.4. Регистрация специальных функций

Как правило, PHP-машина самостоятельно обрабатывает нештатные ситуации и состояния, требующие особой реакции. Однако при необходимости вы можете вмешаться в работу внутренних механизмов (см., например, раздел 15.6) включив собственные обработчики некоторых событий. В этом разделе мы рассмотрим, как включить эти обработчик в состав РНР-машины.

Сразу же отмечу, что обработчики включаются не «навсегда», а только на время выполнения текущей программы.

9.4.1 . Функция завершения:register shutdown function

int register_shutdown_f unction (string func)

Регистрирует функцию обработчика, вызываемого при штатном или аварийном завершении текущей PHP-программы. Подробное описание ее практического использования приведено в разделе 15.6.

совет
       Поскольку к моменту вызова функции обработчика соединение с клиентской программой-навигатором (или терминалом) уже разорвано, никакие выходные данные на экран пользователя поступать не будут. Это означает, что вы не можете пользоваться при отладке функции обработчика привычным методом контрольной печати и должны записывать процесс отладки в файл (см., например, раздел 19.3).

9.4.2. Включение таймера: register_tick_function

void register_tick_function (string func [, mixed arg...])

Функция регистрирует обработчик func, который вызывается каждый тик времени. (Тик представляет собой разновидность «попугаев» и составляет примерно 1/20 секунды.) Этот обработчик используется преимущественно для организации периодического вывода информации о ходе выполнения вычислительного процесса.

9.4.3. Выключение таймера:unregister_tick_f unction

void unregister_tick_function (string func [, mixed arg...])

Эта функция противоположна по своему действию рассмотренной выше и предназначена для отключения обработчика «каждого тика».

назад
далее

Сайт управляется системой uCoz