Скачиваний:
39
Добавлен:
04.04.2013
Размер:
728.06 Кб
Скачать

Функции пользователя

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

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

Функции объявляются с помощью оператора function. Рассмотрим пример, в котором описывается функция, вычисляющая куб числа.

// Начало объявления функции

function cube($num) {

// Возвращает $num в третьей степени

return $num * $num * $num;

}

// Окончание объявления функции

// Вызов функции cube():

echo (cube(6)); // Выводит 216

Первые строки приведенного кода имеют вид:

function имя функции(параметры) {тело функции }

Имя функции (в нашем случае "cube") следует за ключевым словом functi­on, а параметры (если они есть) заключаются в скобки и разделяются запя­тыми. Затем в фигурных скобках должно располагаться тело функции. Для вызова функции просто указывается ее имя, за которым следует пара ско­бок, содержащих ее аргументы. В PHP З объявление функции должно нахо­диться в коде выше, чем первое обращения к ней, однако в PHP 4 функцию можно определить в любом месте, вне зависимости от расположения ее первого вызова.

В приведенном примере вызов функции cube (6) вычисляет выражение со значением 216. Значение, которое возвращает функция, определяется оператором return в теле функции. При выполнении return действие функции прекращается и выполнение продолжается в строке, из которой вызвана функция, с подстановкой возвращенного значения вместо вызова функции. Функция не обязательно должна возвращать значение

Аргументы позволяют передать функции входные параметры. В коде cube(6) аргументом является число 6. Каждый параметр, переданный функции, имеет свое уникальное имя, описанное при объявлении функции. Обращаться к аргументу внутри функции можно как к переменной с соответствующим именем. В функции cube переменная, содержащая значение переданного параметра называется $num.

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

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

function cube($num) {

$num=$num * $num * $num;

return $num;

}

function cube2(&$num) {

$num=$num * $num * $num;

return $num;

}

$a=2;

echo cube($a); //выводит 8

echo $a; //выводит 2

echo cube2($a); //выводит 8

echo $a; //выводит 8

Функция cube получает значение переменной $a и возводит это значение в куб. Значение переменной $a в теле программы остается неизменным. Функция cube2 получает в качестве входного параметра ссылку на переменную $a. В результате выполнения этой функции значение переменной $a изменяется.

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

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

function changeval1() {

$value="2";

}

function changeval2() {

global $value;

$value="2";

}

$value="1";

changeval1();

echo ("$value"); // Выводит "1"

changeval2();

echo ("$value"); // Выводит "2"

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