|  |  | 
    | func_get_args    (PHP 4, PHP 5) func_get_args -- 
     Возвращает массив аргументов функции
    Описаниеarray func_get_args  ( void  ) 
     Возвращает массив, в котором каждый элемент является соответствующим
     членом списка аргументов пользовательской функции.
     func_get_args() генерирует предупреждение
     при вызове вне определения функции.
     
      
     func_get_args() может быть использована совместно с
     func_num_args() и func_get_arg() 
     для создания функций с переменным количеством аргументов.
    
 
 
 
  func_get_args
  
  bew
  31-Mar-2006 07:55
  
A more concise way of expressing my idea from the previous post (I'd forgotten about array_slice()):
 <?php
 function func_get_default_args($a) {
 $args = array_slice(func_get_args(), 1);
 return array_merge($args, array_slice($a, sizeof($args)));
 }
 
 function foo($a = 1, $b = 2, $c = 3) {
 print_r(func_get_default_args(func_get_args(), $a, $b, $c));
 }
 
 foo('a', 'b');
 ?>
 
  Nathan Ostgard
  06-Dec-2005 10:14
  
If you're using PHP5, the variable number of argument functions all return the objects by reference - and not a copy of the object, as this leads you to believe.
 
  robert at defore dot st
  15-Feb-2005 12:47
  
# Another attempt at named args (perl-inspired):
 # list_to_assoc('key', 'value', 'key', 'value', ...) =>
 #     pairs[]
 function list_to_assoc() {
 $list = func_get_args();
 $assoc = array();
 
 while ($list and count($list) > 1) {
 $assoc[array_shift($list)] = array_shift($list);
 }
 
 if ($list) { $assoc[] = $list[0]; }
 
 return $assoc;
 }
 
 # Usage:
 
 function example($required) {
 $args = func_get_args(); array_shift($args); # drop 'required'
 $rest = list_to_assoc($args);
 echo "$required\n" . $rest['comment'];
 }
 
 example("This is required...",
 'comment', 'this is not.'); # this is like 'comment' => 'this is not'
 
  T.M.
  04-Nov-2004 07:24
  
Simple function to calculate average value using dynamic arguments:<?php
 function average(){
 return array_sum(func_get_args())/func_num_args();
 }
 print average(10, 15, 20, 25); ?>
 
  volte6 at drunkduck dot com
  30-Sep-2004 02:54
  
For those who have a use for a C style enum() function:
 //*******************************************
 // void enum();
 // enumerates constants for unique values guarenteed.
 function enum()
 {
 $i=0;
 $ARG_ARR = func_get_args();
 if (is_array($ARG_ARR))
 {
 foreach ($ARG_ARR as $CONSTANT)
 {
 define ($CONSTANT, ++$i);
 }
 }
 }
 
 // USAGE:
 enum(ERR_USER_EXISTS, ERR_OLD_POST);
 
 // etc. etc.
 //*******************************************
 
 this can be used for error codes etc.
 I deliberately skipped the 0 (zero) define, which could be useful for error checking.
 
  mark at manngo dot net
  23-Mar-2003 11:13
  
You can also fake named arguments using eval:
 function test()
 {   foreach (func_get_args() as $k=>$arg) eval ("\$$arg;");
 echo "$a plus $b gives ".($a+$b);
 }
 
 test("a=3","b=4");
 
  fbeyer at clickhand dot de dot noSpamPlease
  19-Jan-2002 08:02
  
Another way of passing references with a dynamic number of arguments: (This example is limited to 10 arguments)
 <?php
 define('NULL_ARG', 'DUMMY_ARGUMENT');
 
 function refArg($arg0 = NULL_ARG,
 $arg1 = NULL_ARG,
 $arg2 = NULL_ARG,
 $arg3 = NULL_ARG,
 $arg4 = NULL_ARG,
 $arg5 = NULL_ARG,
 $arg6 = NULL_ARG,
 $arg7 = NULL_ARG,
 $arg8 = NULL_ARG,
 $arg9 = NULL_ARG)
 {
 for ($args=array(), $i=0; $i < 10; $i++) {
 $name = 'arg' . $i;
 if ($i < func_num_args()) {
 $args[$i] = &$$name;
 }
 unset($$name, $name);
 }
 
 $args[0] = 'Modified.';
 }
 
 $test = 'Not modified.<br>';
 refArg(&$test);
 
 echo $test; ?>
 
  daveNO at ovumSPAMdesign dot com
  17-Sep-2001 11:29
  
<?php
function varargs($args) {
 $count = count($args);
 for ($i = 0; $i < $count; $i += 2) {
 $result[$args[$i]] = $args[$i + 1];
 }
 
 return $result;
 }
 
 function test(&$ref1, &$ref2) {
 $foo = "oof";
 
 extract(varargs(func_get_args()));
 
 echo nl2br("\n\$var1 = $var1");
 echo nl2br("\n\$var2 = $var2");
 echo nl2br("\n\$foo = $foo\n\n");
 
 $ref1 = 42;
 $ref2 = 84;
 }
 
 $a = 5;
 $b = 6;
 
 echo nl2br("Before calling test(): \$a = $a\n");
 echo nl2br("Before calling test(): \$b = $b\n");
 
 test($a, $b, var1, "abc", var2, "def", foo, "bar");
 
 echo nl2br("After calling test(): \$a = $a\n");
 echo nl2br("After calling test(): \$b = $b\n");
 ?>
 
  04-Jun-2001 07:44
  
You can pass a variable number of arguments to a function whilst keeping references intact by using an array. The disadvantage of course, is that the called function needs to be aware that it's arguments are in an array.
<?
 function mutator($args=null) {
 $n=count($args);
 while($i<$n) $args[$i++] = "mutated";
 }
 $a = "hello";
 $b = "strange";
 $c = "world";
 mutator(array($a, &$b, $c));
 echo "$a $b $c";
 ?>
 
 |  |