Разработчику. Сборник рецептов PHP
Задавайте вопросы

Вызов переменных функций

Вернуться назад

Задача

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

Решение

Используйте переменные переменные:

function eat_fruit($fruit)     { print " chewing $fruit. "; }

$function = ' eat_fruit ';
$fruit = ' kiwi ';

$function($fruit);      // вызов функции eat_fruit()

Обсуждение

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

$dispatch = array(
     ' add ' => ' do_add ',
     ' commit ' => ' do_commit ',
     ' checkout ' => ' do_checkout ',
     ' update ' => ' do_update '
);

$cmd = (isset($_REQUEST[' command ']) ? $_REQUEST[' command '] : ' ');

if (array_key_exists($cmd , $dispatch)) {
     $function = $dispatch[$cmd];
     $function(); // вызываем функцию
} else {
     error_log(" Unknown command $cmd ");
}

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

Есть и еще одно преимущество – появляется возможность связать различные команды с одной и той же функцией, так что имя может быть и длинным, и коротким:

$dispatch = array(
     ' add ' => ' do_add ',
     ' commit ' => ' do_commit ', ' ci ' => ' do_commit ',
     ' checkout ' => ' do_checkout ' , ' co ' => ' do_checkout ',
     ' update ' => ' do_update ' , ' up ' => ' do_update '
);

Вернуться назад

Рейтинг@Mail.ru

Яндекс.Метрика

Индекс цитирования

Рейтинг Сайтов ДОСКИ.РУ