SunshinePHP Developer Conference 2015

func_num_args

(PHP 4, PHP 5)

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

Descripción

int func_num_args ( void )

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

Esta función se puede usar junto con func_get_arg() y func_get_args() para permitir a las funciones definidas por el usuario aceptar listas de argumentos de longitud variable.

Valores devueltos

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

Historial de cambios

Versión Descripción
5.3.0 Esta función ahora se puede usar en listas de parámetros.
5.3.0 Si esta función es llamada desde el ámbito último de un fichero que ha sido incluido mediante una llamada a include o require desde dentro de una función en el fichero de llamada, ahora genera una advertencia y devuelve -1.

Errores/Excepciones

Genera una advertencia si se llama desde fuera de una función definida por el usuario.

Ejemplos

Ejemplo #1 Ejemplo de func_num_args()

<?php
function foo()
{
    
$númargs func_num_args();
    echo 
"Número de argumentos: $númargs\n";
}

foo(123);   
?>

El resultado del ejemplo sería:

Número de argumentos: 3

Ejemplo #2 Ejemplo de func_num_args() antes y después de PHP 5.3

prueba.php
<?php
function foo() {
    include 
'./fna.php';
}

foo('Primer argumento''Segundo argumento');
?>

fna.php
<?php

$núm_args 
func_num_args();
var_export($núm_args);

?>

Salida antes de PHP 5.3:

2

La salida en PHP 5.3 y posterior será algo similar a:

Warning: func_num_args():  Called from the global scope - no function
context in /home/torben/Desktop/code/ml/fna.inc on line 3
-1

Notas

Nota:

Como esta función depende del ámbito actual para determinar los detalles del parámetro, no puede ser usada como parámetro de función en versiones anteriores a 5.3.0. Si se require pasar el valor, los resultados deben ser asignados a una variable y esta variable debería pasarse como parámetro.

add a note add a note

User Contributed Notes 6 notes

up
9
jared at ws-db dot com
9 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
2
luisguillermo dot quevedovelez at gmail dot com
2 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
ashley at dcs dot warwick dot ac dot uk
12 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
1
andy at arakka dot co dot th
9 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>";
}
?>
up
1
Dennis Robinson from basnetworks dot net
5 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
0
thalis at NOSPAMcs dot pitt dot edu
12 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()
   
}
}
?>
To Top