PHP 8.4.2 Released!

func_get_arg

(PHP 4, PHP 5, PHP 7, PHP 8)

func_get_argВозвращает элемент из списка аргументов

Описание

func_get_arg(int $position): mixed

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

Функцию допускается использовать совместно с функциями func_get_args() и func_num_args(), чтобы создавать функции с переменным количеством аргументов.

Список параметров

position

Смещение аргумента. Аргументы функции отсчитываются с нуля.

Возвращаемые значения

Функция возвращает аргумент по позиции или false, если возникла ошибка.

Ошибки

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

Примеры

Пример #1 Пример использования функции func_get_arg()

<?php

function foo()
{
$numargs = func_num_args();

echo
"Количество аргументов: $numargs\n";

if (
$numargs >= 2) {
echo
"Второй аргумент: " . func_get_arg(1) . "\n";
}
}

foo(1, 2, 3);

?>

Результат выполнения приведённого примера:

Количество аргументов: 3
Второй аргумент: 2

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

<?php

function byVal($arg) {
echo
'Передан : ', var_export(func_get_arg(0)), PHP_EOL;
$arg = 'baz';
echo
'После изменения : ', var_export(func_get_arg(0)), PHP_EOL;
}

function
byRef(&$arg) {
echo
'Передан : ', var_export(func_get_arg(0)), PHP_EOL;
$arg = 'baz';
echo
'После изменения : ', var_export(func_get_arg(0)), PHP_EOL;
}

$arg = 'bar';
byVal($arg);
byRef($arg);

?>

Результат выполнения приведённого примера:


Передан : 'bar'
После изменения : 'baz'
Передан : 'bar'
После изменения : 'baz'

Примечания

Замечание:

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

Замечание:

Изменения аргументов отразятся на значениях, которые возвращает функция, если аргументы передали по ссылке. В PHP 7 также вернутся текущие значения, если аргументы передали по значению.

Замечание: Функция возвращает только копии аргументов, которые передали, и не возвращает значения по умолчанию для аргументов, которые не передавали.

Смотрите также

  • Синтаксис ...
  • func_get_args() - Возвращает массив, который содержит список аргументов функции
  • func_num_args() - Возвращает количество аргументов, переданных функции

Добавить

Примечания пользователей 5 notes

up
8
beta3designs [at] gmail [dot] com
15 years ago
This functions seems so powerful... just when i saw it i thought about writing a fast average of n numbers function so here it is, it is very simple... example usage included.

<?php

//Calculate the average of the numbers given

function avg(){
$sum = 0;
for(
$i = 0; $i < func_num_args(); $i++){
$sum += func_get_arg($i);
}
$avg = $sum / func_num_args();
return
$avg;
}

echo
sprintf("%.2f",avg(2,1,2,1,3,4,5,1,3,6));
?>
up
1
gordon at abetz-rouse dot com dot au
4 years ago
This function may work differently from php5 to php7, in the latter it seems to reference the variable, while in php5 it returns the original argument.
I have confirmed with the versions below, but this will require further confirmation as to whether this is a 5 versus 7 issue.

function test( $test ){

$test = '123';

echo func_get_arg(0);

}

test( '321' );

//in php 5.5.9, this script will write '321'
//in php 7.0.33, this script will write '123'
up
1
mightye (at) mightye (dot) org
20 years ago
func_get_arg() returns a *copy* of the argument, to my knowledge there is no way to retrieve references to a variable number of arguments.

I have a module system in my game at http://lotgd.net where I'd like to be able to pass a variable number of arguments to functions in a module, and pass them by reference if the module asks for it by reference, but you can't accept optional parameters as references, nor can you retrieve the reference on a variable number of arguments. Looks like my modules will have to do with out the ability to accept parameters to their functions by reference.
up
-4
mw atto lanfear dotto com
20 years ago
func_get_arg() does not appear to be allowed to be used as a function argument itself within class constructors in PHP 5.0.2 (wonk-ay!!!):

<?php

class ABC
{
function
__construct()
{
foreach (
func_get_args() as $name => $value)
{
echo <<<EOT
<br/>
$name : $value <br/>
<br/>

EOT;
}
}
}

class
DEF extends ABC
{
function
__construct()
{
parent::__construct(func_get_arg(0),
func_get_arg(1),
func_get_arg(2));
}
}

$def = new DEF(123123, "asdfasdf", "blahblahblah");

?>

The above script generates:

Fatal error: func_get_arg(): Can't be used as a function parameter in c:\Inetpub\wwwroot\phpwasrc\chapter10\xxx.php on line 23

There are, however, no problems when passing these as parameters to regular functions.
up
-5
anders at ingemann dot fakestuff dot de
20 years ago
I actually think that there is need for such "do absolutely everything" functions. I use them mostly as tools for rapid prototyping.
And there is a method with which you may be able to pass several strings to a function: ereg();
Another use for such functions is to create little code snippets for other people out there. They won't have to edit the function any longer if they do not use a parameter. They just don't name it when calling the function.
This results in allrounder functions that are very robust in their use.Normally you just have a little code snippet (e.g. ip-blocking snippets). Through this type of programming you have whole functions.
To Top