belarusweb.net
© Петр Романовский Минск, 2016-2017.



belarusweb.net

Основы создания сайтов...
PHP+MySQL >>>
                          Учебник Задачник Справочник

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

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

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

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

<?php
$n_1=1; //Присвоили первой переменной значение
$n_2=2; //Присвоили второй переменной значение

function my_func(&$a_1,$a_2){ //Объявили функцию с 2 аргументами, первый из 
										//которых передается по ссылке, а второй по значению 
	$a_1=10; 
	$a_2=20;
} 
my_func($n_1,$n_2); //Вызвали функцию
echo $n_1." ".$n_2; //Выведет 10 2
?>

Пример 5.4. Передача аргументов функции по значению и по ссылке

Также в PHP имеется возможность использовать для аргументов функции значения по умолчанию, которые представляют собой значения, используемые в случае, если данному аргументу при вызове функции не будет передано вообще никакого значения. Для того, чтобы задать значение аргумента по умолчанию, необходимо в определении функции присвоить желаемое значение данному аргументу (см. пример 5.5). При этом значения по умолчанию могут иметь как аргументы, передаваемые по значению, так и аргументы, передаваемые по ссылке. Однако в любом случае все аргументы, которым присваиваются значения по умолчанию, должны идти в списке после аргументов, у которых значения по умолчанию отсутствуют. Кроме того, в качестве значений по умолчанию могут использоваться только константные выражения, а также массивы и значение NULL. Использовать, например, переменные или вызовы функций нельзя.

<?php
$n_1=1; 
$n_2=7; 

function my_func($a_1,$a_2=2,$a_3=3){ //Объявили функцию с 3 аргументами, два  
												  //из которых имеют значения по умолчанию 
	$sum=$a_1+$a_2+$a_3;	 //1+7+3=11, третье значение использовано по умолчанию 
	return  $sum;       	 //Возвращаем сумму аргументов 
} 
echo my_func($n_1,$n_2); //Выведет 11 
?>

Пример 5.5. Использование значений аргументов по умолчанию

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

<?php
function m_sum(...$args){    //Указали, что функция принимает аргументы  
								     //в массив $args переменной длины 
	$sum=0; 					     //Присвоили начальное значение сумме аргументов
	foreach($args as $value){ //Перебираем все значения массива аргументов
		$sum+=$value; 
	}
	return  $sum;        	  // Возвращаем сумму аргументов функции 
} 
echo m_sum(1,2,3,4,5);       //Выведет 15 
?>

Пример 5.6. Использование списка аргументов переменной длины

Перед многоточием можно указывать обычные аргументы, при этом все остальные аргументы, переданные функции будут занесены в массив. Более того, перед многоточием можно указывать тип аргументов, которые могут быть занесены в массив, а также знак амперсанда '&' для передачи аргументов по ссылке (см. пример 5.7).

<?php
$sum=0;
$a_1=1;
$a_2=2;
function m_sum($sum, &...$args){   //Указали, что функция принимает аргументы  
											  //по ссылке в массив $args переменной длины 
	foreach($args as $value){		  //Перебираем все значения массива аргументов
		$sum+=$value; 
	}
	$args[0]=10;             //Изменили значение первого аргумента массива $args
	return  $sum;        	 //Возвращаем сумму аргументов массива $args 
} 
echo m_sum($sum,$a_1,$a_2).'<br>'; //Выведет 3 (1+2) 
echo $a_1;  	 //Выведет 10, т.к. значение было передано функции по ссылке и 
					 //затем изменено функцией на 10
?>

Пример 5.7. Особенности использования списка аргументов переменной длины

Разрешается использовать многоточие '...' для разворачивания массива, передаваемого в качестве аргумента функции, в аргументы функции в виде его элементов (см. пример 5.8).

<?php
function m_sum_2($a,$b){	//Создаем функцию с двумя аргументами 
    return $a+$b;				//Возвращаем сумму аргументов
}
echo m_sum_2(...[1, 2]).'<br>';   //Разворачиваем переданный функции массив. Выведет 3
$a_3=[1, 2]; 				   //Присваиваем массив переменной
echo m_sum_2(...$a_3);	   //Разворачиваем переданный функции массив. Выведет 3
?>

Пример 5.8. Разворачивание массива аргументов, переданного функции при вызове

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

<?php
function m_sum($a) {     //Указали, что функция ожидает получить один аргумент 
$sum = 0; 
$m_arg=func_get_args();  //Присвоили массив переданных функции аргументов 

foreach($m_arg  as $value){    //Цикл по массиву аргументов, переданных функции
	$sum += $value; 
}
echo func_num_args().'<br>';	 //Выведет количество аргументов, переданных функции
echo func_get_arg(2); 	 //Выведет значение третьего аргумента, переданного функции

return  $sum;       	    //Возвращаем сумму аргументов функции 
} 
m_sum(1,2,8);  //Вызвали функцию. Выведет 38, т.е. количество переданных 
					//аргументов равно 3, а значение третьего аргумента равно 8 
					//(нумерация элементов начинается с нуля)
?>

Пример 5.9. Использование специальных функций для работы аргументами

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

Контрольные вопросы и задания

  1. Каким образом аргументы функции передаются по ссылке?
  2. Как задать для аргументов значения по умолчанию?
  3. Опишите синтаксис для использования списка аргументов переменной длины.
  4. Перечислите три функции, которые предназначены для работы с аргументами.

Словарь новых английских слов

function [ˈfʌŋ(k)ʃ(ə)n] – функция.
return [rɪˈtəːn] – возвращать.
argument [ˈɑːɡjʊm(ə)nt] – аргумент.
closure [ˈkləʊʒə] – замыкание.
Комментарии (0)
Петр Романовский
1. Приветствуются комментарии, которые содержат дополнения к материалу текущей страницы, а также ваши ответы на вопросы других пользователей.
2. Если вам что-то непонятно - спрашивайте, не забывая написать, что именно и с какого места.
Показаны все комментарии
Чтобы оставить свой комментарий, авторизуйтесь, пожалуйста!    
     
belarusweb.net © Петр Романовский, Минск, 2016-2017.
Связаться с автором
Наверх