func_num_args

(PHP 4, PHP 5)

func_num_args --  Returns the number of arguments passed to the function

Description

int func_num_args ( void )

Returns the number of arguments passed into the current user-defined function. func_num_args() will generate a warning if called from outside of a user-defined function. This function cannot be used directly as a function parameter. Instead, its result may be assigned to a variable, which can then be passed to the function.

注: 因为本函数依赖于当前域来决定参数细节,因此不能用作函数参数。如果必须要传递这个值,将结果赋给一个变量,然后传递该变量。

<?php
function foo()
{
    
$numargs = func_num_args();
    echo
"Number of arguments: $numargs\n";
}

foo(1, 2, 3);    // Prints 'Number of arguments: 3'
?>

func_num_args() may be used in conjunction with func_get_arg() and func_get_args() to allow user-defined functions to accept variable-length argument lists.


add a note add a note User Contributed Notes
neelam_ab2003 at yahoo dot co dot in
11-May-2006 03:40
Just adding a note to JARED's Note.

func_num_args() works if and only if called from within a function definition BECAUSE it calculates the number of arguments sent while function calling. That is why it gives

'1' in helloWorld("HelloWorld!") and '2' in helloWorld("HelloWorld!", "HowdyWorld!") - There is nothing to do with DEFAULT args.

If you call the same function as helloWorld(); "No args passed"

It will give a warning for wrong function call ("Warning: Missing argument 1 for helloWorld()") and the result of func_num_args() will be '0'.
friz at godshell dot com
17-Mar-2006 03:24
This function comes in extremely handy in OO Classes.  My focus is currently PHP 4, but this technique probably works just as well in PHP 5.

Class foo {
   // constructor, other methods, etc

   function somedata($somedata = '') {
     if (func_num_args() > 0) {
         $this->somedata = $somedata;
     }

     return $this->somedata;
   }
}

This allows for a default value to be set, while not requiring the parameter.  (Yes, I'm aware that it only warns when you do, but I think this is a little cleaner)
jared at ws-db dot com
07-Sep-2005 12:46
Just a note for anyone wondering. This function doesn't include params that have a default value, unless you pass one in to overwrite the default param value. Not sure if that makes sense, so here's an example:

function helloWorld($ArgA, $ArgB="HelloWorld!") {
  return func_num_args();
}

// The following will return 1
$Returns1 = helloWorld("HelloWorld!");

// The following will return 2
$Returns2 = helloWorld("HelloWorld!", "HowdyWorld!");
andy at arakka dot co dot th
12-May-2005 10:16
func_num_args() can be used in conjunction with named arguments, also. For example:
function DebugShow( $label, $value ) {
  echo "# " . $label ;
  if ( func_num_args() > 1 ) echo " = " . $value ;
  echo "<br>";
}
ashley at dcs dot warwick dot ac dot uk
17-Apr-2002 07:40
If you want to pass the parameters on intact to another function, use func_get_args and call_user_func_array (careful - this one is only available in recent PHP versions).  For example:

/* Print an HTML tag.  This accepts a variable number of arguments:
   the first should be the name of the tag, followed by pairs of
   arguments that describe keys and values.  The values are printed
   with surrounding double quote characters.  */
function printTag() {
  $numArgs = func_num_args();
  if ($numArgs < 1) die("printTag given no arguments");
 
  echo "<" . func_get_arg(0);
  for ($i = 1; $i < $numArgs; $i+=2) {
   echo " " . func_get_arg($i);
   if ($i+1 < $numArgs)
     echo "=\"" . func_get_arg($i+1) . "\"";
  }
  echo ">";
 
}

/* Print an HTML tag with a newline on the end */
function printTagNL() {
  $args = func_get_args();
  call_user_func_array("printTag", $args);
  echo "\n";
}

printTagNL("input", "type", "hidden", "name", "SORTORDER", "value", $columnNo);
thalis at NOSPAMcs dot pitt dot edu
30-Mar-2002 04:05
The idea of func_get_args() is to construct functions of variable number of parameters like
function var_param_func(){
   if(func_num_args()==0){
       //do one thing
   }
   if(func_num_args()==1)
       //do another thing
       //get the args with func_get_args()
   }
}