PHP 4 на практике

       

Функции-переменные


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



    Содержание раздела