главная :: основы PHP
Функции-переменные
Одной из интересных возможностей РНР являются функции-переменные (variable functions), то есть динамические вызовы функций, имена
которых определяются во время выполнения программы. Хотя в большинстве web-приложений можно обойтись и без функций-переменных,
они значительно сокращают объем и сложность программного кода, а также часто снимают необходимость в условных командах if.
Вызов функции-переменной представляет собой имя переменной, за которым следует пара круглых скобок. В круглых скобках могут
перечисляться параметры (однако присутствие параметров не обязательно). Обобщенный синтаксис функции-переменной:
$имя_функции( );
Следующая программа (листинг 4.6) демонстрирует эту непривычную, но полезную возможность. Допустим, программа выводит разную
информацию в зависимости от языка, выбранного пользователем. В нашем примере для простоты используются приветственные сообщения
для англо- и италоязычных пользователей. Алгоритм на псевдокоде:
- Создать сообщение для итальянского языка в функции с именем italian.
- Создать сообщение для английского языка в функции с именем english.
- Передать информацию о выбранном языке в сценарий, присвоив значение переменной $language.
Переменная $language используется для выполнения функции-переменной (в приведенном примере — italian()).
Листинг 4.6. Выбор функции в зависимости от пользовательского ввода
// Приветствие на итальянском языке, function italian( ) {
" print "Benvenuti al PHP Recipes.";
}
// Приветствие на английском языке
function english( ) {
print "Welcome to PHP Recipes.";
}
// Выбрать итальянский язык
$language = "italian":
// Выполнить функцию-переменную
$language( );
Листинг 4.6 демонстрирует интересную концепцию функций-переменных и наглядно показывает, что функции-переменные способствуют
уменьшению объема программного кода. Если бы не эта возможность, функцию пришлось бы выбирать командой if или switch; это привело бы
к заметному увеличению объема программного кода и риску появления дополнительных ошибок при кодировании.
|