Вызов функций по имени
Работа со списком аргументов
Проверка наличия определений функций
Регистрация специальных функций
В этом разделе мы рассмотрим функции, которые позволяют проверить наличие
определения других пользовательских функций. Основное их назначение — реализация контроля конфигурации 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_Е>Список функций, определенных в системеТ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.
Как правило, 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...])
Эта функция противоположна по своему действию рассмотренной выше и предназначена для отключения обработчика «каждого тика».
|