2010-01-22 9 views

Respuesta

32

Sí. Utilice func_num_args() y func_get_arg() para obtener los argumentos:

<?php 
    function dynamic_args() { 
     echo "Number of arguments: " . func_num_args() . "<br />"; 
     for($i = 0 ; $i < func_num_args(); $i++) { 
      echo "Argument $i = " . func_get_arg($i) . "<br />"; 
     } 
    } 

    dynamic_args("a", "b", "c", "d", "e"); 
?> 

En PHP 5.6+ ahora se puede utilizar variadic functions:

<?php 
    function dynamic_args(...$args) { 
     echo "Number of arguments: " . count($args) . "<br />"; 
     foreach ($args as $arg) { 
      echo $arg . "<br />"; 
     } 
    } 

    dynamic_args("a", "b", "c", "d", "e"); 
?> 
+2

bastante seguro func_get_args '() 'es lo que realmente quiere usar en lugar de esta primera solución detallada. – Toskan

0

les animo a pasar un arreglo en su función, de esta forma usted puede tener tantos parámetros diferentes almacenados en esa matriz. Hay muchas operaciones que puede realizar en la matriz una vez que está en la función para obtener la información correcta que necesita.

$array = array(); 
$array[0] = "a"; 
$array[1] = 1; 

myFunction($array); 
6

Puede aceptar un número variable de argumentos para cualquier función, siempre y cuando hay un número suficiente para llenar todos los argumentos declarados.

<?php 

function test ($a, $b) { } 

test(3); // error 
test(4, 5); // ok 
test(6,7,8,9) // ok 

?> 

Para acceder a los argumentos sin nombre adicionales pasados ​​a test(), se utilizan las funciones func_get_args(), func_num_args() y func_get_arg($i):

<?php 

// Requires at least one param, $arg1 
function test($arg1) { 

    // func_get_args() returns all arguments passed, in order. 
    $args = func_get_args(); 

    // func_num_args() returns the number of arguments 
    assert(count($args) == func_num_args()); 

    // func_get_arg($n) returns the n'th argument, and the arguments returned by 
    // these functions always include those named explicitly, $arg1 in this case 
    assert(func_get_arg(0) == $arg1); 

    echo func_num_args(), "\n"; 
    echo implode(" & ", $args), "\n"; 

} 

test(1,2,3); // echo "1 & 2 & 3" 

?> 
1

me gusta tomar un enfoque Javascript-esque con mis parámetros de PHP . Esto permite una mejor configuración de "opciones" y sus valores predeterminados (que miraré momentáneamente). Por ejemplo, supongamos que tiene una función que devuelve un rango de veces en una matriz. El parámetro 1 es la hora de inicio, el parámetro 2 es la hora final, el parámetro 3 es el intervalo de tiempo y cualquier opción posterior es opcional (como "formato" => "24 horas", "include_seconds" => TRUE, etc.)

Yo definiría la función como esta:

function returnTimeInterval($startTime, $endTime, $interval, $options = array()) 
{ 
    // the first thing to do is merge options in with our defaults 
    $options = array_merge(array(
     "format" => "24-hour", 
     "include_seconds => TRUE 
     // etc. 
    ), $options); 

Esto permite el ajuste de valores por defecto dentro de la función que se puede sustituir a continuación, que está muy bien. Por supuesto, debe tener cuidado de que no se pasen las opciones extrañas y no utilizadas, pero se lo dejo a usted. :)

+0

'array_intersect_key()' ayudará a evitar opciones desconocidas. – Walf

2

o simplemente

function printArgs() { 

foreach (func_get_args() as $arg){ 
    echo $arg; 
} 
} 

printArgs("1 ", "2 ", "three "); 

salidas 1 2 three

2

Aunque esta pregunta es muy antiguo: De hecho en PHP 5.6+ puede escribir exactamente lo que escribió: D

Cuestiones relacionadas