Поиск

Создание и использование простых функций

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

Синтаксис для создания определяемых пользователем функций следующий:

function FunctionName () {
statement(s);

При именовании функции нужно руководствоваться теми же самыми пра вилами, что и при присвоении имен переменным, за исключением использо вдния знака доллара. При определении и вызове функций знак $ не нужен. Имена функций должны быть значимыми, как и названия переменных (напри мер, CreateHeader более подходящее имя функции, чем Functionl). Помни те, что нельзя использовать пробел, так как в этом случае имя функции будет состоять из дву5с слов, что приведет к ошибке (знак подчеркивания является общепринятой заменой пробела: Create_Header правильное имя функции).

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

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

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

Функция, создаваемая вами, вызывается с помощью обращения к ней, как и любая встроенная функция. Строка кода FunctionName ( ) ; инициирует вы полнение включенных в эту функцию инструкций.

Обратимся к генерирующему пароли сценарию (глава 5) и перепишем его с использованием функции.

Создание и вызов базовой функции

  1. Откройте файл passwords.php в текстовом редакторе (листинг 9.1). Листинг 9.1 т Это исходный сценарий для создания паролей, в котором не используются функции. Создадим первую функцию с помощью кода, составля ющего основу данной страницы.
  2. 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>
  3. Поменяйте стандартный HTMLзаголовок на тэг <?php. Мы должны определить функцию до того, как она будет вызвана (это требу ется в РНР 3.x), поэтому напишем функцию в самом начале сценария, до HTMLкода.
  4. function CreatePassword () { Назовем функцию CreatePassword. Имя соответствует назначению функ ции и легко запоминается.
  5. Теперь поместим PHPкод (строки 613) из сценария passwords.php в функ цию. Чтобы было видно, что эти строки принадлежат функции, я бы ре комендовал разместить их с отступом от строки с именем функции (лис тинг 9.2).
  6. $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") ;
  7. Закройте функцию на следующей строке фигурной скобкой (}). Пропуск открывающей или закрывающей скобки распространенная при чина ошибок, поэтому тщательно соблюдайте правила синтаксиса.
  8. Закройте PHPкод тэгом ?>.
    Мы закрываем PHPраздел страницы, так как собираемся писать HTMLкод. При желании можно оставить раздел РНР открытым и послать код в браузер с помощью функции print ( ) . В таком случае пропустите этот пункт.
  9. Напишите стандартный HTMLзаголовок.
  10. <HTMLxHEADxTITLE>Password Generator within a Function</TITLEx/HEAD> <BODY>
  11. Откройте новый PHPраздел страницы тэгом <?php.
    В HTMLдокумент можно вставлять несколько разделов PHPкода, это впол не обычная практика.
  12. CreatePasswordO ; Если функция уже определена и вы хотите ее использовать, просто вызови те ее по имени (будьте внимательны и не ошибитесь в написании). Не забывай те про скобки.
  13. ></BODYx/HTML> Закройте второй PHPраздел и НТМЬтэги.
  14. Сохраните сценарий, загрузите его на сервер (листинг 9.2) и протестируй те в браузере (рис. 9.1). ч
  15. Листинг 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>
    Если на вашем сервере установлен PHP 3.x, сначала необходимо определить функ цию, и только после этого вызывать ее. Несмотря на то что в РНР 4.0 это ограни чение снято, лучше располагать функции в самом начале сценария. Это гаранти рует создание функции до ее вызова.
    Имена создаваемых вами функций, так же как и имена встроенных функций РНР, не чувствительны к регистру. Поэтому не имеет никакого значения, напишете ли вы createpassword или CreatePassword.