Одной
из интересных возможностей РНР являются функции-переменные (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; это привело бы к заметному увеличению объема
программного кода и риску появления дополнительных ошибок при кодировании. |