Здравствуйте! Записался на ваш курс, но не понимаю как произвести оплату. Надо ли писать заявление и, если да, то куда отправлять? как я получу диплом о профессиональной переподготовке? |
Функции в PHP
Переменные функции
PHP поддерживает концепцию переменных функций. Это значит, что если имя переменной заканчивается круглыми скобками, то PHP ищет функцию с таким же именем значения и пытается ее выполнить.
<? /* создадим две простые функции: Add_sign – добавляет подпись к строке и Show_text – выводит строку текста */ function Add_sign($string, $sign="С уважением, Петр"){ echo $string ." ".$sign; } function Show_text(){ echo "Отправить сообщение по почте<br>"; } $func = "Show_text"; // создаем переменную со значением, // равным имени функции Show_text $func(); // это вызовет функцию Show_text $func = "Add_sign"; // создаем переменную со значением, // равным имени функции Add_sign $func("Привет всем <br>"); // это вызовет функцию // Add_sign с параметром "Привет всем" ?>Пример 5.11. Использование переменных функций
В этом примере функция Show_text просто выводит строку текста. Казалось бы, зачем для этого создавать отдельную функцию, если существует специальная функция echo(). Дело в том, что такие функции, как echo(), print(), unset(), include() и т.п. нельзя использовать в качестве переменных функций. То есть если мы напишем:
<? $func = "echo "; $func("TEXT"); ?>
то интерпретатор выведет ошибку:
Fatal error: Call to undefined function: echo() in c:\users\nina\tasks\func\var_f.php on line 2
Поэтому для того, чтобы использовать любую из перечисленных выше функций как переменную функцию, нужно создать собственную функцию, что мы и сделали в предыдущем примере.
Внутренние (встроенные) функции
Говоря о функциях, определяемых пользователем, все же нельзя не сказать пару слов о встроенных функциях. С некоторыми из встроенных функций, такими как echo(), print(), date(), include(), мы уже познакомились. На самом деле все перечисленные функции, кроме date(), являются языковыми конструкциями. Они входят в ядро PHP и не требуют никаких дополнительных настроек и модулей. Функция date() тоже входит в состав ядра PHP и не требует настроек. Но есть и функции, для работы с которыми нужно установить различные библиотеки и подключить соответствующий модуль. Например, для использования функций работы с базой данных MySql следует скомпилировать PHP с поддержкой этого расширения. В последнее время наиболее распространенные расширения и соответственно их функции изначально включают в состав PHP так, чтобы с ними можно работать без каких бы то ни было дополнительных настроек интерпретатора.
Решение задачи
Напомним, в чем состоит задача. Мы хотим написать интерфейс, который позволял бы создавать html-формы. Пользователь выбирает, какие элементы и в каком количестве нужно создать, придумывает им названия, а наша программа сама генерирует требуемую форму.
Разобьем задачу на несколько подзадач: выбор типов элементов ввода и их количества, создание названий элементов ввода и обработка полученных данных, т.е. непосредственно генерация формы. Первая задача достаточно проста: нужно написать соответствующую форму, например подобную приведенной ниже ():
<form action="ask_names.php"> Создать элемент "строка ввода текста": <input type=checkbox name=types[] value=string><br> Количество элементов: <input type=text name=numbers[string] size=3><br> <br> Создать элемент "текстовая область": <input type=checkbox name=types[] value=text><br> Количество элементов: <input type=text name=numbers[text] size=3><br> <input type=submit value="Создать"> </form>Листинг 5.12. task_form.html
Когда мы пишем в имени элемента формы, например types[], это значит, что его имя – следующий элемент массива types. То есть у нас первый элемент формы ( "строка ввода текста" ) будет иметь имя types[0], а второй (текстовая область) – types[1]. В браузере task_form.html будет выглядеть примерно так:
После отправки данных этой формы мы получим информацию о том, какие элементы и сколько элементов каждого типа нужно создать. Следующий скрипт запрашивает названия для этих элементов:
<? $file = "task.php"; /* файл, который будет обрабатывать сгенерированную этим скриптом форму */ function Ask_names(){ // функция генерирует форму для // ввода названий элементов ввода global $file; //объявляем, что хотим использовать эту // переменную, заданную вне функции if (isset($_GET["types"])){ $st = '<form action="'.$file.'">'; foreach ($_GET["types"] as $k => $type){ /* перебираем все типы элементов, которые нужно создать */ $num = $_GET["numbers"][$type]; // сколько элементов каждого типа нужно for ($i=1;$i<=$num;$i++){ // создаем $num строк для ввода $st.= "Введите имя $i-го элемента типа $type: "; $st.= "<input type=text name=names[$type][]><br>"; } // сохраняем тип и число необходимых // элементов ввода этого типа $st.= "<input type=hidden name=types[] value=$type>"; $st.= "<input type=hidden name=numbers[] value=$num><br>"; } $st .= "<input type=submit name=send value=send></form>"; return $st; // в переменной $st содержится код формы // для запроса имен } else echo "Select type"; } echo Ask_names(); // вызываем функцию и выводим // результаты ее работы ?>Листинг 5.13. ask_names.php
Допустим, нужно создать два элемента типа "текстовая строка" и один элемент типа "текстовая область", как и отмечено в форме выше. Тогда скрипт ask_names.php обработает ее таким образом, что мы получим такую форму:
Введем в эту форму, например, строки "Название", "Автор" и "Краткое содержание". Эти данные будет обрабатывать скрипт task.php.
<? $show_file = "task_show.php"; /* файл, который будет обрабатывать данные созданной этим файлом формы */ function Create_element($type,$name){ // функция создает элемент ввода // по типу и названию $str=""; switch($type){ case "string": $str .= "$name: <input type=text name=string[]><br>"; break; case "text": $str .= "$name: <textarea name=text[]></textarea><br>"; break; } return $str; } function Create_form(){ // функция создает форму // с нужными элементами global $show_file; $str = '<form action="'.$show_file.'">'; foreach ($_GET["types"] as $k => $type){ // перебираем типы элементов $num = $_GET["numbers"][$k]; // число элементов этого типа for ($i=1;$i<=$num;$i++){ $arr = $_GET["names"][$type][$i-1]; // имя создаваемого элемента $str .= Create_element($type,$arr); // вызываем функцию для // создания элемента } } $str .= "<input type=submit value=send></form>"; echo $str; } $crt = "Create_form"; $crt(); // вызываем функцию создания // формы Create_form ?>Листинг 5.14. task.php
Результатом работы этого скрипта с входными данными, приведенными выше, будет следующая форма:
Заключение
Подведем итоги. В этой лекции мы изучили функции, определяемые пользователем, их синтаксис и семантику, способы передачи их аргументов и возвращаемых значений. Кроме того, обсуждались способы задания и работы с функциями, имеющими переменное число аргументов и альтернативный способ вызова функции (с помощью переменной, значение которой есть имя функции). В следующей лекции будет рассмотрена объектная модель языка PHP.