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!");
?>
คืนค่าการตั้งค่าทั้งหมด
คุณแน่ใจว่าต้องการคืนค่าการตั้งค่าทั้งหมด ?
ลำดับตอนที่ #3 : ตอนที่ยังไม่ได้ตั้งชื่อ
func_num_args
(PHP 4, PHP 5, PHP 7)
func_num_args — Returns the number of arguments passed to the function
Description ¶
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.
Return Values ¶
Returns the number of arguments passed into the current user-defined function.
Changelog ¶
Version | Description |
---|---|
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 callinginclude or require from within a function in the calling file, it now generates a warning and returns -1. |
Errors/Exceptions ¶
Generates a warning if called from outside of a user-defined function.
Examples ¶
Example #1 func_num_args() example
function foo()
{
$numargs = func_num_args();
echo "Number of arguments: $numargsn";
}
foo(1, 2, 3);
?>
The above example will output:
Number of arguments: 3
Example #2 func_num_args() example before and after PHP 5.3
test.php
function foo() {
include './fna.php';
}
foo('First arg', 'Second arg');
?>
fna.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
Notes ¶
User Contributed Notes 6 notes
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:
// $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:
// $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.
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);
?>
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.
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()
}
}
?>
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 "
";
}
?>
ความคิดเห็น