PHP 8.4.2 Released!

func_num_args

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

func_num_argsRetorna o número de argumentos passados ​​para a função

Descrição

func_num_args(): int

Obtém o número de argumentos passados ​​para a função.

Esta função pode ser usada em conjunto com func_get_arg() e func_get_args() para permitir que funções definidas pelo usuário aceitem listas de argumentos de comprimento variável.

Parâmetros

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

Valor Retornado

Retorna o número de argumentos passados ​​para a função atual definida pelo usuário.

Erros/Exceções

Gera um aviso se for chamado de fora de uma função definida pelo usuário.

Exemplos

Exemplo #1 Exemplo de func_num_args()

<?php
function foo()
{
echo
"Número de argumentos: ", func_num_args(), PHP_EOL;
}

foo(1, 2, 3);
?>

O exemplo acima produzirá:

Número de argumentos: 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

adicione uma nota

Notas Enviadas por Usuários (em inglês) 6 notes

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

// 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
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:

<?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
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
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);
?>
To Top