©
本文档使用 PHP中文网手册 发布
(PHP 4, PHP 5, PHP 7)
func_num_args — Returns the number of arguments passed to the function
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 );
?>
以上例程会输出:
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:
2
Output in PHP 5.3 and later will be something similar to:
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 以前的版本中不能用作函数的参数。如必须传递此值时,可将结果赋与一个变量,然后用此变量进行传递。
[#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() > 1 ) 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+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);
?>
[#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()
}
}
?>