文字
分享

func_num_args

(PHP 4, PHP 5, PHP 7)

func_num_argsReturns the number of arguments passed to the function

说明

int func_num_args ( void )

Gets the number of arguments passed to the function.

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

返回值

Returns the number of arguments passed into the current user-defined function.

更新日志

版本 说明
5.3.0 This function can now be used in parameter lists.
5.3.0 If this function is called from the outermost scope of a file which has been included by calling include or require from within a function in the calling file, it now generates a warning and returns -1.

错误/异常

Generates a warning if called from outside of a user-defined function.

范例

Example #1 func_num_args() example

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

foo ( 1 2 3 );   
?>

以上例程会输出:

1

Number of arguments: 3

Example #2 func_num_args() example before and after PHP 5.3

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

foo ( 'First arg' 'Second arg' );
?>

fna.php
<?php

$num_args 
func_num_args ();
var_export ( $num_args );

?>

Output previous to PHP 5.3:

1

2

Output in PHP 5.3 and later will be something similar to:

1

2

3

Warning: func_num_args():  Called from the global scope - no function

context in /home/torben/Desktop/code/ml/fna.php on line 3

-1

注释

Note:

因为函数依赖于当前作用域以确定参数的细节,所以在 5.3.0 以前的版本中不能用作函数的参数。如必须传递此值时,可将结果赋与一个变量,然后用此变量进行传递。

参见

  • func_get_arg() - 返回参数列表的某一项
  • func_get_args() - 返回一个包含函数参数列表的数组
  • ReflectionFunctionAbstract::getNumberOfParameters() - 获取参数数目

用户评论:

[#1] luisguillermo dot quevedovelez at gmail dot com [2012-03-13 07:32:48]

I had defined a function function_name(){ ...} as a drupal callback.
I try to get how many params where passed

I got a Error and my Site falls down

I've replaced func_get_args() instead func_num_args() and my Site was restored.

I conclude you can not use  func_num_args() in callbacks.

Hope it helps.

[#2] Dennis Robinson from basnetworks dot net [2009-06-29 21:29:25]

This function comes in handy, and I believe is the only solution, when you have an optional parameter that can take any type of data.

For example:

<?php

// $data can be of any type, including null
function my_function($name$data null)
{
    if (
$data !== null)
    {
        
// Do something with $data
        // If you call my_function('something'), this WILL NOT be reached
        // If you call my_function('something', null), this WILL NOT be reached
    
}
}

?>


The problem with the above function is that you will never be able to use null as the value for $data.  To fix this, use func_num_args() like so:

<?php

// $data can be of any type, including null
function my_function($name$data null)
{
    if (
func_num_args() >= 2)
    {
        
// Do something with $data
        // If you call my_function('something'), this WILL NOT be reached
        // If you call my_function('something', null), this WILL be reached
    
}
}

?>


This solution works because func_num_args() reports exactly how many arguments were passed when the function was called.  It does not take into account when default argument values are used.

[#3] jared at ws-db dot com [2005-09-06 09:46:41]

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:

<?php
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!");
?>

[#4] andy at arakka dot co dot th [2005-05-11 19:16:50]

func_num_args() can be used in conjunction with named arguments, also. For example:

<?php
function DebugShow$label$value ) {
  echo 
"# " $label ;
  if ( 
func_num_args() > ) echo " = " $value ;
  echo 
"<br>";
}
?>

[#5] ashley at dcs dot warwick dot ac dot uk [2002-04-17 04:40:26]

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:

<?php
/* 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+$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);
?>

[#6] thalis at NOSPAMcs dot pitt dot edu [2002-03-29 12:05:31]

The idea of func_get_args() is to construct functions of variable number of parameters like

<?php
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()
    
}
}
?>

上一篇:func_get_args下一篇:function_exists