Функции > Переменные и встроенные функции
Закрыть

Переменные функции

PHP поддерживает концепцию переменных функций.
Это значит, что если имя переменной заканчивается круглыми скобками, то PHP ищет функцию с таким же
именем и пытается ее выполнить.


/* создадим две простые функции:
Add_sign – добавляет подпись к строке и
Show_text – выводит строку текста */

function Add_sign($string,
$sign="С уважением, Петр"){
echo $string ." ".$sign;
}
function Show_text(){
echo "Отправить сообщение по почте";
}
$func = "Show_text";
// создаем переменную со значением,
// равным имени функции Show_text
$func();
// это вызовет функцию Show_text
$func = "Add_sign";
// создаем переменную со значением,
// равным имени функции Add_sign
$func("Привет всем ");
// это вызовет функцию
// Add_sign с параметром "Привет всем"
?>


Пример 1. Использование переменных функций (html, txt)

В этом примере функция Show_text просто выводит строку текста.
Казалось бы, зачем для этого создавать отдельную функцию, если существует специальная функция echo().
Дело в том, что такие функции, как echo(), print(), unset(), include() и т.п.
нельзя использовать в качестве переменных функций. То есть если мы напишем:


<?php
$func = "echo ";
$func("TEXT");
?>



то интерпретатор выведет ошибку:


Fatal error: Call to undefined function:
echo() in
c:usersninatasksfuncvar_f.php on line 2



Поэтому для того, чтобы использовать любую из перечисленных выше функций как переменную функцию,
нужно создать собственную функцию, что мы и сделали в предыдущем примере.


Внутренние (встроенные) функции

Говоря о функциях, определяемых пользователем, все же нельзя не сказать пару слов о встроенных функциях.
С некоторыми из встроенных функций, такими как echo(), print(), date(), include(), мы уже познакомились.
На самом деле все перечисленные функции, кроме date(), являются языковыми конструкциями.

Они входят в ядро PHP и не требуют никаких дополнительных настроек и модулей. Функция date() тоже
входит в состав ядра PHP и не требует настроек. Но есть и функции, для работы с которыми нужно установить
различные библиотеки и подключить соответствующий модуль. Например, для использования функций работы с
базой данных MySql следует скомпилировать PHP с поддержкой этого расширения. В последнее время наиболее
распространенные расширения и соответственно их функции изначально включают в состав PHP так, чтобы с
ними можно работать без каких бы то ни было дополнительных настроек интерпретатора.

Решение задачи

Напомним, в чем состоит задача. Мы хотим написать интерфейс, который позволял бы создавать html-формы.
Пользователь выбирает, какие элементы и в каком количестве нужно создать, придумывает им названия, а наша
программа сама генерирует требуемую форму.

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



Когда мы пишем в имени элемента формы, например 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();
// вызываем функцию и выводим
// результаты ее работы
?>



Допустим, нужно создать два элемента типа «текстовая строка» и один элемент типа «текстовая область»,
как и отмечено в форме выше. Тогда скрипт 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
?>



Результатом работы этого скрипта с входными данными, приведенными выше, будет следующая форма:


Пример формы, сгенерированной нашей программой

Не хлебом единым жив человек, а стало быть его должна интересовать не только работа и не только функции PHP. Вот здесь у нас на термостат Opel Astra цена . Вам интересно? Тогда пройдите по ссылке. . Быть может, вас это интересует, тогда не упускайте возможность приобщиться!