PHP 8.1.28 Released!

func_num_args

(PHP 4, PHP 5, PHP 7, PHP 8)

func_num_argsReturns the number of arguments passed to the function

Descrição

func_num_args(): int

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.

Parâmetros

Esta função não possui parâmetros.

Valor Retornado

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

Erros/Exceções

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

Exemplos

Exemplo #1 func_num_args() example

<?php
function foo()
{
echo
"Number of arguments: ", func_num_args(), PHP_EOL;
}

foo(1, 2, 3);
?>

O exemplo acima produzirá:

Number of arguments: 3

Notas

Nota:

A partir do PHP 8.0.0, a família de funções func_*() deve ser mais transparente em relação aos argumentos nomeados, tratando os argumentos como se fossem todos passados posicionalmente, e os argumentos ausentes são substituídos por seus valores padrão. Esta função ignora a coleção de argumentos variádicos nomeados desconhecidos. Argumentos nomeados desconhecidos que são coletados só podem ser acessados por meio do parâmetro variádico.

Veja Também

add a note

User Contributed Notes 7 notes

up
38
jared at ws-db dot com
18 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();
}

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

// The following will return 2
$Returns2 = helloWorld("HelloWorld!", "HowdyWorld!");
?>
up
9
Dennis Robinson from basnetworks dot net
14 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:

<?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.
up
1
tongcheong77 at gmail dot com
6 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
up
3
luisguillermo dot quevedovelez at gmail dot com
12 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.
up
2
thalis at NOSPAMcs dot pitt dot edu
22 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){
//do one thing
}
if(
func_num_args()==1)
//do another thing
//get the args with func_get_args()
}
}
?>
up
0
ashley at dcs dot warwick dot ac dot uk
22 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
/* 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);
?>
up
-9
andy at arakka dot co dot th
18 years ago
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>";
}
?>
To Top