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

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

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

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'
);

Оцените статью: (0 голосов)
0 5 0

Статьи из раздела PHP на эту тему:
Возвращение более одного значения
Возвращение значений по ссылке
Возвращение информации об ошибке
Доступ к глобальной переменной внутри функции
Доступ к параметрам функций

Вернуться в раздел: PHP / 6. Функции