Версия для печати

Урок 4. Функционируем?

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

В PHP существует два типа функций:

  • зарезервированные функции;
  • функции, определяемые пользователем.

С первым типом мы уже сталкивались, например, когда упоминали функцию print_r(). Эти функции уже заранее разработаны производителем, и мы можем беспрепятственно ими воспользоваться. Они имеют самое разнообразное применение: это и математические функции, и функции работы со строками, массивами, файлами, временем и так далее. Все эти функции вы можете посмотреть в Мануале PHP, либо с некоторыми наиболее используемыми функциями, переведенными на русский язык, вы можете познакомиться прямо на этом сайте.

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

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

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

function имя_функции(аргумент1, аргумент2 и так далее)
{
      некоторый операции, выполняемые при вызове функции ;
}

Имя функции - оригинальный идентификатор, может содержать все буквы латинского алфавита, числа и знак подчеркивания. Следите, чтобы имя вашей функции не совпадало с зарезервированной функцией PHP, иначе программа выведет ошибку. Заметьте, что имя функции, в отличие от имени переменной, нечувствительно к регистру.

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

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

Использование функций, определенных пользователем, полностью идентично использованию зарезервированных функций.

Приведу в качестве примера определение простенькой функции:

function sum($a, $b)
{
   $c = $a + $b;
   echo "$a + $b = $c <br>";
   return $c;
}

Конструкция return аргумент заставляет данную функцию возвращать после своего выполнения значение аргумента. Посмотрим пример использования вышеуказанной функции:

$a = sum(12, 5);
echo $a;
/* этот код выведет
12 + 5 = 17
17
*/

В этом примере переменной $a присвоилось значение, возвращенное  функцией sum (т.е. значение $c). Если бы мы не указали в определении функции return $c, то пример выше вывел бы только 12 + 5 = 17.

Нужно учесть, что все переменные внутри функции являются локальными, действующими только в теле функции. Поэтому в примере выше не было ошибкой строчка $a = sum(12, 5), где в функции sum уже есть своя переменная $a. Эти переменные никоем образом не пересекаются и имеют совершенно разное значение.

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

function word ($word)     
//функция word() и переменная $word - совершенно разные вещи
{
    global $string;           //определение $string как глобальной
    $string = $word." - отличная вещь!";
}
word ("PHP");
echo $string;            //выведет "PHP - отличная вещь!"

Как видите, мы не применяли return, так что функция ничего не возвращает, но мы определили переменную $string как глобальную, поэтому она действует в пределах всего кода php, так что в данном случае $string в функции равна $string вне функции.

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

function mult ($a)
{
   static $result=1;      //определение $result как статичной
   $result *= $a;
   echo $result.'<br>';
}
for ($i=2; $i<=4; $i++)
{ mult($i) ;}

/*выведет
2
6
24
*/

Если бы мы не написали static, то пример вывел бы числа 2, 3 и 4.

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

function arr_count ($a, $b=3)   /* значение по умолчанию должно указываться справа */
// такая запись: function arr_count ($b=3, $a) - будет работать неверно
{
    global $array;
    $result = $array[$a] + $array[$b];
    return $result;
}
$array = array(2, 5, 4, 7, 2);
echo arr_count(2)." + ".arr_count(1, 4)." = ".(arr_count(2) + arr_count(1, 4));
// выведет
11 + 7 = 18

Функцию можно сделать значением переменной. Например, продолжаем пример выше:

$CountArray='arr_count';
echo $CountArray(0);      //выведет число 9

На этом все. До следующего урока.


Назад, на урок 3

Дальше, на урок 5 

Назад

Hosted by uCoz