Урок 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 |
На этом все. До следующего урока.
|