(PHP 4, PHP 5, PHP 7, PHP 8)
func_num_args — Returns the number of arguments passed to the function
DescriptionThis 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.
ParametersThis function has no parameters.
Return ValuesReturns the number of arguments passed into the current user-defined function.
Errors/ExceptionsGenerates a warning if called from outside of a user-defined function.
ExamplesExample #1 func_num_args() example
<?php
function foo()
{
echo "Number of arguments: ", func_num_args(), PHP_EOL;
}foo(1, 2, 3);
?>
The above example will output:
Notesjared at ws-db dot com ¶Note:
As of PHP 8.0.0, the func_*() family of functions is intended to be mostly transparent with regard to named arguments, by treating the arguments as if they were all passed positionally, and missing arguments are replaced with their defaults. This function ignores the collection of unknown named variadic arguments. Unknown named arguments which are collected can only be accessed through the variadic parameter.
19 years ago
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();
} $Returns1 = helloWorld("HelloWorld!"); $Returns2 = helloWorld("HelloWorld!", "HowdyWorld!");
?>
Dennis Robinson from basnetworks dot net ¶
15 years ago
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:
<?phpfunction my_function($name, $data = null)
{
if ($data !== null)
{
}
}?>
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:
<?phpfunction my_function($name, $data = null)
{
if (func_num_args() >= 2)
{
}
}?>
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.
luisguillermo dot quevedovelez at gmail dot com ¶
13 years ago
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.
thalis at NOSPAMcs dot pitt dot edu ¶
23 years ago
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){
}
if(func_num_args()==1)
}
}
?>
ashley at dcs dot warwick dot ac dot uk ¶
23 years ago
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
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 ">";
}
function printTagNL() {
$args = func_get_args();
call_user_func_array("printTag", $args);
echo "\n";
} printTagNL("input", "type", "hidden", "name", "SORTORDER", "value", $columnNo);
?>
tongcheong77 at gmail dot com ¶
7 years ago
If you are using PHP 7 and func_num_args is in your base class which you extended, you can pass your arguments with the 'spat' operator.
class Sql {
public function doGetWhere(...$args) {
$num_args = func_num_args();
$args_list = func_get_args();
echo '<pre>';
var_dump($args_list);
echo '<pre>';
}
}
class Member extends Sql {
public function getWhere(...$args) {
$this->doGetWhere(...$args);
}
}
$member = new Member();
$member->getWhere('first_name','last_name','userlevel','email','where','email','=',$sub_email);
However, take note that if you 'new up' the 'Sql' class in your 'Member' class above, instead of extending it, you will not need to pass your arguments as a variable. Just my two cents. -Bruce tong
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.3