Списки аргументов переменной длины

ЛАБОРАТОРНАЯ РАБОТА № 14

Тема: Функции в PHP.

Цель: изучить приемы работы с функциями в PHP.

Оборудование и программное обеспечение:

Персональный компьютер IBM PC/AT.

Операционная система MS-DOS, Windows 95/98/NT/2000/XP.

Веб сервер Apache.

Интерпретатор языка PHP.

Теоретическая часть

Функция может быть определена с помощью следующего синтаксиса:

function Имя_функции (параметр1, параметр2, ... параметрN)

{

Блок_действий

return "значение возвращаемое функцией";

}

Пример правильного объявления функции:

Функция вычисления факториала натурального числа

Lt;?php

function fact($n)

{

if($n==0) return 1;

else return $fact = $n * fact($n-1);

}

echo fact(3);

// можно было бы написать echo (3 * 2);

// но если число большое, то удобнее пользоваться функцией,

echo fact(50);

// чем писать echo (50 * 49 * 48 * ... * 3 * 2);

?>

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

Имя_функции ("значение_для_параметра1", "значение_для_параметра2", ...);

Аргументы функций

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

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

Параметры в функцию в PHP можно передавать по значению (по умолчанию так и делается) и по ссылке. Когда аргумент передается в функцию по значению, изменение значения аргумента внутри функции не влияет на его значение вне функции. Например:

<? php

function func($n){

$n++;

echo $n; //Напечатается 9

};

$k=8;

func($k);

echo $k; //Напечатается 8

?>

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

<? php

function func(&$n){

$n++;

echo $n; //Напечатается 9

};

$k=8;

func($k);

echo $k; //Напечатается 9

?>

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

<? php

function func($n){

$n++;

echo $n; //Напечатается 9

};

$k=8;

func(&$k);

echo $k; //Напечатается 9

?>

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

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

<? php

function func($n, $town="New York"){

echo $n;

echo "<br>";

echo $town;

echo "<br>";

}

$k=22;

//Вызов функции с параметром по умолчанию

func($k);

//Вызов функции с заданным параметром

func($k, "Los Angeles");

?>

Указанный фрагмент выведет четыре строки: 22, New York, 22 и Los Angeles.

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

...

//Правильно

function func1($n, $town="New York", $type=2){

...

}

//Неправильно

function func2($n, $town="New York", $type){

...

}

...

Списки аргументов переменной длины

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

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

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

Номер_аргумента не может превышать число аргументов, переданных в функцию. Иначе будет сгенерировано предупреждение, и функция func_get_arg() возвратит False.

Функция func_get_args() возвращает массив, состоящий из списка аргументов, переданных функции. Каждый элемент массива соответствует аргументу, переданному функции. Если функция используется вне определения пользовательской функции, то генерируется предупреждение.

Функция для подсчета суммы своих параметров:

<?php

function f(){

$sum=0;

for($i=0; $i<func_num_args();$i++){

$sum+=func_get_arg($i);

}

return $sum;

}

echo f(2, 3, 1, 5);// выведет 11

?>

Наши рекомендации