func_get_arg

(PHP 4, PHP 5)

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

Описание

mixed func_get_arg ( int $arg_num )

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

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

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

arg_num

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

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

Возвращает указанный аргумент, или FALSE в случае ошибки.

Список изменений

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

Ошибки

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

Примеры

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

<?php
function foo()
{
     
$numargs func_num_args();
     echo 
"Количество аргументов: $numargs<br />\n";
     if (
$numargs >= 2) {
         echo 
"Второй аргумент: " func_get_arg(1) . "<br />\n";
     }
}

foo (123);
?>

Пример #2 Использование func_get_arg() до и после PHP 5.3

test.php
<?php
function foo() {
    include 
'./fga.inc';
}

foo('Первый аргумент''Второй аргумент');
?>

fga.inc
<?php

$arg 
func_get_arg(1);
var_export($arg);

?>

Вывод до PHP 5.3:

'Второй аргумент'

Вывод в PHP 5.3 и выше:

Warning: func_get_arg():  Called from the global scope - no function
context in /home/torben/Desktop/code/ml/fga.inc on line 3
false

Пример #3 Пример передачи аргументов по ссылке и по значению с 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'
После изменения : 'bar'
Передан : 'bar'
После изменения : 'baz'

Примечания

Замечание:

Так как для определения параметров данной функции необходим контекст выполнения, она не может быть передана в качестве параметра в версиях PHP до 5.3.0. Если функцию все же необходимо передать, то нужно присвоить ее переменной, которую уже можно использовать при передаче.

Замечание:

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

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

add a note add a note

User Contributed Notes 4 notes

up
2
beta3designs [at] gmail [dot] com
6 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
anders at ingemann dot fakestuff dot de
11 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.
up
-1
mightye (at) mightye (dot) org
11 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
-1
mw atto lanfear dotto com
10 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.
To Top