Аргументы функции в PHP
http://belarusweb.net
Основы создания сайтов

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

Что такое аргументы функции?

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

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

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

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

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

PHP Результат BwCodes
<?php

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

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

//Выведет 10 2
echo $n_1." ".$n_2; 

?>

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

Значения аргументов функции по умолчанию

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

PHP Результат BwCodes
<?php

$n_1=1; 
$n_2=7; 

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

?>

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

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

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

PHP Результат BwCodes

<?php

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

?>

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

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

PHP Результат BwCodes
<?php

$sum=0;
$a_1=1;
$a_2=2;

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

//Выведет 3 (1+2)
echo m_sum($sum,$a_1,$a_2).'<br>';  

//Выведет 10, т.к. значение было передано функции  
//по ссылке и затем изменено функцией на 10
echo $a_1;  	  

?>

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

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

PHP Результат BwCodes
<?php

//Создаем функцию с двумя аргументами
function m_sum_2($a,$b){ 
	//Возвращаем сумму аргументов
	return $a+$b;				
}

//Разворачиваем переданный функции массив
//Выведет 3
echo m_sum_2(...[1, 2]).'<br>'; 	 

//Присваиваем массив переменной											  
$a_3=[1, 2];
 				    
//Разворачиваем переданный функции массив
//Выведет 3
echo m_sum_2(...$a_3); 

?>

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

Функции для доступа к аргументам

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

  • func_get_args() – возвращает массив, состоящий из аргументов функции;
  • func_get_arg(n) – возвращает указанный аргумент функции, где n=0,1,2,... – номер аргумента в списке, который начинается с нуля (напомним, что аргументы вычисляются слева направо);
  • func_num_args() – возвращает количество реально переданных функции аргументов.
PHP Результат BwCodes
<?php

//Указали, что функция ожидает получить 1 аргумент
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;         
}
 
//Вызвали функцию. Выведет 38, т.е. количество переданных аргументов равно 3,
//а значение 3-го аргумента равно 8 (нумерация элементов начинается с нуля)
m_sum(1,2,8);  			  

?>

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

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

Быстрый переход к другим страницам