Поиск
Создание и использование простых функций
При программировании определенные фрагменты кода часто многократно ис пользуются как в одном сценарии, так и в нескольких. Оформив эти подпро граммы в виде отдельной функции, вы сэкономите время и облегчите програм мирование, особенно при работе с быстро растущими сайтами. Если функция создана, она будет выполнять заданные в ней действия при каждом вызове так же, как функция print ( ) посылает текст в браузер при каждом ее использо вании.
Синтаксис для создания определяемых пользователем функций следующий:
function FunctionName () {
statement(s);
При именовании функции нужно руководствоваться теми же самыми пра вилами, что и при присвоении имен переменным, за исключением использо вдния знака доллара. При определении и вызове функций знак $ не нужен. Имена функций должны быть значимыми, как и названия переменных (напри мер, CreateHeader более подходящее имя функции, чем Functionl). Помни те, что нельзя использовать пробел, так как в этом случае имя функции будет состоять из дву5с слов, что приведет к ошибке (знак подчеркивания является общепринятой заменой пробела: Create_Header правильное имя функции).
В область, ограниченную фигурными скобками, можно вставлять любой PHPкод, в том числе вызовы других функций. Количество инструкций в функ ции может быть любым, но не забывайте после каждой инструкция ставить точку с запятой.
При написании функции желательно придерживаться тех же правил фор матирования, что использовались на протяжении всей книги, хотя это и Не требуется синтаксисом. Главное, чтобы все необходимые элементы были на месте. К ним относятся: слово function, имя функции, открывающая и закры вающая круглые скобки, открывающая и закрывающая фигурные скобки и по следовательность инструкций.
Инструкции функции традиционно размещаются с отступом от начала пре дыдущей строки, это делает код более ясным. В любом случае выберите фор мат, который вам больше нравится (он должен быть синтаксически и логичес ки правильным), и придерживайтесь его.
Функция, создаваемая вами, вызывается с помощью обращения к ней, как и любая встроенная функция. Строка кода FunctionName ( ) ; инициирует вы полнение включенных в эту функцию инструкций.
Обратимся к генерирующему пароли сценарию (глава 5) и перепишем его с использованием функции.
Создание и вызов базовой функции
- Откройте файл passwords.php в текстовом редакторе (листинг 9.1). Листинг 9.1 т Это исходный сценарий для создания паролей, в котором не используются функции. Создадим первую функцию с помощью кода, составля ющего основу данной страницы.
- Поменяйте стандартный HTMLзаголовок на тэг <?php. Мы должны определить функцию до того, как она будет вызвана (это требу ется в РНР 3.x), поэтому напишем функцию в самом начале сценария, до HTMLкода.
- function CreatePassword () { Назовем функцию CreatePassword. Имя соответствует назначению функ ции и легко запоминается.
- Теперь поместим PHPкод (строки 613) из сценария passwords.php в функ цию. Чтобы было видно, что эти строки принадлежат функции, я бы ре комендовал разместить их с отступом от строки с именем функции (лис тинг 9.2).
- Закройте функцию на следующей строке фигурной скобкой (}). Пропуск открывающей или закрывающей скобки распространенная при чина ошибок, поэтому тщательно соблюдайте правила синтаксиса.
- Закройте PHPкод тэгом ?>.
Мы закрываем PHPраздел страницы, так как собираемся писать HTMLкод. При желании можно оставить раздел РНР открытым и послать код в браузер с помощью функции print ( ) . В таком случае пропустите этот пункт. - Напишите стандартный HTMLзаголовок.
- Откройте новый PHPраздел страницы тэгом <?php.
В HTMLдокумент можно вставлять несколько разделов PHPкода, это впол не обычная практика. CreatePasswordO ;Если функция уже определена и вы хотите ее использовать, просто вызови те ее по имени (будьте внимательны и не ошибитесь в написании). Не забывай те про скобки.></BODYx/HTML>Закройте второй PHPраздел и НТМЬтэги.- Сохраните сценарий, загрузите его на сервер (листинг 9.2) и протестируй те в браузере (рис. 9.1). ч
1 <HTML> '
2 <HEAD>
3 <TITLE>Password Generator</TITLEx/HEAD>
4 <BODY>
5 <?php
6 $String = "This is the text which will be encrypted so that we may
create random and secure passwords!";
7 $Lerigth = 8; // Измените это значение, чтобы установить длину пароля.
32 символа максимум.
8 $String = md5($String);
9 $StringLength = strlen($String);
10 srand ((double) microtimeO * 1000000);
11 $Begin = rand(0,($StringLength$Lengthl)); // Pick an arbitrary
starting point.
12 $Password = substr($String, $Begin, $Length);
13 print ("Your recommended password is:<PxBIG>$Password</BIG>\n");
14 ?> . •
15 </BODY>
16 </HTML>
$String = "This is the text which will be encrypted so
—that we may create random and secure passwords!";
$Length = 8 ; / / Измените это значение, чтобы установить длину пароля.
—32 символа максимум.
$String = md5($String);
$StringLength = strlen($String);
srand ((double) microtimeO * 1000000);
$Begin = rand(0,($StringLength$Lengthl)); // Pick an
—Получение произвольной точки старта".
$Password = substr($String, $Begin, $Length);
print ("Your recommended password is:
—<PxBIG>$Password</BIGxP> \n") ;
<HTMLxHEADxTITLE>Password Generator within a Function</TITLEx/HEAD>
<BODY>
Листинг 9.2 т Размещение функции' в самом начале сценария хороший способ выделить ее. Подобным образом размещение инструкций функции с от ступом помогает установить их принадлежность к функции. Затем одна строка кода в основном теле сценария выполняет многочисленные инструкции.
1 <?php
2 function CreatеРавsword () {
3 $String = "This is the text which will be encrypted so that we may
create random and secure passwords!";
4 $Length =8; // Измените это значение, чтобы установить длину
пароля. 32 символа максимум.
5 $String = md5($String);
6 $StringLength = strlen($String);
7 srand ((double) microtimeO * 1000000);
8 $Begin • rand(0,($StringLength$Lengthl)); // Pick an arbitrary
starting point.
9 $Password = substr($String, $Begin, $Length) /•
10 print ("Your recommended password is: <P><BIG>$Password</BIGxP>
\n") ;
11 } // Конец функции CreatePassword.
12 ?>
13 <HTML>
14 <HEAD>
15 <TITLE>Password Generator within a Function</TITLEx/HEAD>
16 <BODY> •
17' <?php
18 CreatePasswordO; У/ Вызов функции.
19 ?>
20 </BODY>
21 </HTML>