Функции PHP. Инструкция return. Локальные переменные PHP. Глобальные переменные PHP

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

Пользовательские функции PHP.
Общий синтаксис определения функции

Пользовательские функции — это функции, которые определяются программистом. Создать функцию означает написать в програмном коде ее определение: имя, список параметров(не обязательно), и програмный код (тело функции), который будет выполнен при вызове этой функции.

Определение (описание) функции начинается ключевым словом function. Описание функции имеет следующий синтаксис:

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

код

}

Имя функции выбирается так же, как и имя переменной, за исключением того, что недопустимо первым символом в имени функции использовать символ $. Недопустимо также использовать в качестве имени ключевые слова языка РНР. За именем функции обязательно стоит пара круглых скобок (). Програмный код (тело) функции заключается в фигурные скобки {}. Они определяют группу выражений, которые относятся к коду именно этой функции. Если функция принимает параметры, то список их имен (идентификаторов) указывается в круглых скобках около имени функции. Имена параметров выбираются согласно тем же требованиям, что и имена обычных переменных. Если параметров несколько, то в списке они разделяются запятыми. Если параметры для данной функции не предусмотрены, то в круглых скобках около имени ничего не пишут.

Инструкция return

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

Пример:

<?php
function mySr($w,$h){
$S=$w*$h;
return $S;
}
echo mySr(5,4); //выводит 20
?>

В окне веб-браузера это будет выглядеть ТАК.

Здесь функция mySr принимает два параметра — $w и $h, вычисляет и возвращает произведение их значений.

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

Имя функции в ее вызове должно совпадать с именем ранее определенной функции. Совпадение с точностью до регистра не обязательно. Например, выражения MySr(), mYsR(), MYsr(), mysR() эквивалентны.

Параметры по умолчанию

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

Пример:

<?php
$x=5;
function mySn($a){
$a=$a+4;
$y=10;
return $a;
}
echo mySn($x); //возвращает 9
echo '<br>';
echo $x; //выводит 5(прежднее значение)
echo '<br>';
echo $y; /*ничено не выводится, т.к. значение $y вне функции mySn() равно null*/
?>

В окне веб-браузера это будет выглядеть ТАК.

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

<?php
$x=5;
function mySn($x){
$x=$x+4;
$y=10;
return $x;
}
echo mySn($x); //возвращает 9
echo '<br>';
echo $x; //выводит 5(прежднее значение)
echo '<br>';
echo $y; /*ничено не выводится, т.к. значение $y вне функции mySn() равно null*/
?>

В окне веб-браузера это будет выглядеть ТАК.

Передача параметров по ссылке

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

function имя_функции($arg1, $arg2, . . . ){

код

}

Пример:

<?php
$x=5;
function mySn(&$arg){
$arg=$arg+4;
return $arg;
}
echo mySn($x); //возвращает 9
echo '<br>';
echo $x; //выводит 9(новое значение)
?>

В окне веб-браузера это будет выглядеть ТАК.

Переменное число параметров

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

Пример:

<?php
function Srec($w=10,$h=5){
$S=$w*$h;
return $S;
}
echo Srec() ; //возвращает 50
echo '<br>';
echo Srec(6); //возвращает 30
?>

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

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

Локальные переменные PHP

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

Пример:

<?php
$a=100; // глобальная переменная, равная 100
function test($a)
{ echo $a;/* выводим значение параметра $a. Этот параметр не имеет к глобальной $a никакого отношения!*/
$a++; /* изменяется только локальная копия значения, переданного в $a*/
}
test(1);// выводит 1
echo '<br>';
echo $a;// выводит 100 — глобальная $a, конечно, не изменилась
?>

В окне веб-браузера это будет выглядеть ТАК.

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

Пример:

<?php
function Str_t()
{ $i=rand();// записывает в $i случайное число
echo $i;/* выводит его на экран. Эта $i не имеет к $i цикла никакого отношения */
}
for($i=0; $i!=10; $i++) Str_t();
?>

В окне веб-браузера это будет выглядеть ТАК.

Здесь переменная $i в функции будет не той переменной $i, которая используется в программе для организации цикла. Поэтому, собственно, цикл и проработает только 10 "витков", напечатав 10 случайных чисел (а не будет крутиться долго и упорно, пока "в рулетке" функции rand() не выпадет 10.

Глобальные переменные PHP

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

Пример:

<?php
function Str_t() {
global $i;
$i=rand();
echo $i;
}

for($i=0; $i!=10; $i++) Str_t();
?>

В окне веб-браузера это будет выглядеть ТАК.

Вот теперь-то переменная $i будет везде едина: что в функции, что во внешнем цикле (для последнего это приведет к немедленному его "зацикливанию", во всяком случае, на ближайшие несколько минут, пока rand() не выкинет 10). А вот еще один пример, который показывает удобство использования глобальных переменных внутри функции:

<?php
$Monthes[1]="Январь";
$Monthes[2]="Февраль";
//... и т. д.
$Monthes[12]="Декабрь";
// Возвращает название месяца по его номеру. Нумерация начинается с 1!
function GetMonthName($n){
global $Monthes;
return $Monthes[$n];
}

//. . .
echo GetMonthName(2); // выводит "Февраль"
?>

В окне веб-браузера это будет выглядеть ТАК.

Массив $Monthes, содержащий названия месяцев, довольно объемист.
Поэтому описывать его прямо в функции было бы, мягко говоря, неудобно. В то же время функция GetMonthName() представляет собой довольно преемлемое средство для приведения номера месяца к его словесному эквиваленту (что может потребоваться во многих программах). Она имеет единственный и понятный параметр: это номер месяца. Как бы мы это сделали без глобальных переменных?




  • Другие |
назадвверхвперед
Rambler's Top100