PHP 8.6.0 Beta 1 is available for testing

func_num_args

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

func_num_argsDevuelve el número de argumentos pasados a la función

Descripción

function func_num_args(): int

Obtiene el número de argumentos pasados a la función.

func_get_arg() puede ser utilizado conjuntamente con func_num_args() y func_get_args() para permitir que las funciones de usuario acepten un número variable de argumentos.

Parámetros

Esta función no contiene ningún parámetro.

Valores devueltos

Devuelve el número de argumentos pasados a la función de usuario actual.

Errores/Excepciones

Genera una advertencia si es llamada fuera de una función de usuario.

Ejemplos

Ejemplo #1 Ejemplo con func_num_args()

<?php
function foo()
{
 echo "Número de argumentos: ", func_num_args(), PHP_EOL;
}
foo(1, 2, 3); // muestra ''
?>

El ejemplo anterior mostrará:

Número de argumentos: 3

Notas

Nota: A partir de PHP 8.0.0, la familia de funciones func_*() está diseñada para ser esencialmente transparente con respecto a los argumentos nombrados, tratando los argumentos como si fueran todos pasados de manera posicional, y los argumentos faltantes son reemplazados con sus valores por defecto. Esta función ignora la colección de argumentos variádicos nombrados desconocidos. Los argumentos nombrados que son recolectados solo son accesibles a través del parámetro variádico.

Véase también

Found A Problem?

Learn How To Improve This PageSubmit a Pull RequestReport a Bug
+add a note

User Contributed Notes 6 notes

up
41
jared at ws-db dot com
20 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
10
Dennis Robinson from basnetworks dot net
17 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
3
luisguillermo dot quevedovelez at gmail dot com
14 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
24 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
tongcheong77 at gmail dot com
9 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
0
ashley at dcs dot warwick dot ac dot uk
24 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);
?>
+add a note

AltStyle によって変換されたページ (->オリジナル) /