variable valores valor una sacar retornan referencia que por pasar parametros otra obtener objeto funciones funcion php variadic-functions

valores - return value php function



Cómo pasar una cantidad variable de argumentos a una función de PHP (9)

Aquí hay una solución usando el método mágico __invoke

(Disponible desde php 5.3)

class Foo { public function __invoke($method=null, $args=[]){ if($method){ return call_user_func_array([$this, $method], $args); } return false; } public function methodName($arg1, $arg2, $arg3){ } }

Desde dentro de la misma clase:

$this(''methodName'', [''arg1'', ''arg2'', ''arg3'']);

Desde una instancia de un objeto:

$obj = new Foo; $obj(''methodName'', [''arg1'', ''arg2'', ''arg3''])

Tengo una función PHP que toma una cantidad variable de argumentos (usando func_num_args() y func_get_args() ), pero el número de argumentos que quiero pasar la función depende de la longitud de una matriz. ¿Hay alguna manera de llamar a una función PHP con una cantidad variable de argumentos?


Desde PHP 5.6 , se puede especificar una lista de argumentos variables con el ... operador.

function do_something($first, ...$all_the_others) { var_dump($first); var_dump($all_the_others); } do_something(''this goes in first'', 2, 3, 4, 5); #> string(18) "this goes in first" #> #> array(4) { #> [0]=> #> int(2) #> [1]=> #> int(3) #> [2]=> #> int(4) #> [3]=> #> int(5) #> }

Como puede ver, el ... operador recopila la lista de variables de argumentos en una matriz.

Si necesita pasar los argumentos variables a otra función, el ... aún puede ayudarlo.

function do_something($first, ...$all_the_others) { do_something_else($first, ...$all_the_others); // Which is translated to: // do_something_else(''this goes in first'', 2, 3, 4, 5); }

Desde PHP 7 , la lista de variables de argumentos puede ser forzada a ser todo del mismo tipo también.

function do_something($first, int ...$all_the_others) { /**/ }


En un nuevo Php 5.6 , puede usar ... operator lugar de usar func_get_args() .

Entonces, al usar esto, puede obtener todos los parámetros que aprueba:

function manyVars(...$params) { var_dump($params); }


Esto ahora es posible con PHP 5.6.x , usando el operador ... (también conocido como operador splat en algunos idiomas):

Ejemplo:

function addDateIntervalsToDateTime( DateTime $dt, DateInterval ...$intervals ) { foreach ( $intervals as $interval ) { $dt->add( $interval ); } return $dt; } addDateIntervaslToDateTime( new DateTime, new DateInterval( ''P1D'' ), new DateInterval( ''P4D'' ), new DateInterval( ''P10D'' ) );



Para aquellos que buscan una forma de hacer esto con $object->method :

call_user_func_array(array($object, ''method_name''), $array);

Tuve éxito con esto en una función de construcción que llama a una variable nombre_método con parámetros variables.


Puedes simplemente llamarlo.

function test(){ print_r(func_get_args()); } test("blah"); test("blah","blah");

Salida:

Array ([0] => blah) Array ([0] => blah [1] => blah)


Si tiene argumentos en una matriz, puede interesarle la función call_user_func_array .

Si la cantidad de argumentos que desea aprobar depende de la longitud de una matriz, probablemente signifique que puede empacarlos en una matriz por sí mismos, y usar esa para el segundo parámetro de call_user_func_array .

Los elementos de esa matriz que pase serán luego recibidos por su función como parámetros distintos.


Por ejemplo, si tienes esta función:

function test() { var_dump(func_num_args()); var_dump(func_get_args()); }

Puede empacar sus parámetros en una matriz, como esta:

$params = array( 10, ''glop'', ''test'', );

Y, luego, llame a la función:

call_user_func_array(''test'', $params);

Este código será el resultado:

int 3 array 0 => int 10 1 => string ''glop'' (length=4) 2 => string ''test'' (length=4)

es decir, 3 parámetros; exactamente como iof la función se llamó de esta manera:

test(10, ''glop'', ''test'');


Una vieja pregunta, lo sé, sin embargo, ninguna de las respuestas aquí realmente hace un buen trabajo simplemente responder la pregunta.

Acabo de jugar con php y la solución se ve así:

function myFunction($requiredArgument, $optionalArgument = "default"){ echo $requiredArgument . $optionalArgument; }

Esta función puede hacer dos cosas:

Si se llama con solo el parámetro requerido: myFunction("Hi") Imprimirá "Hola por defecto"

Pero si se llama con el parámetro opcional: myFunction("Hi","me") se imprimirá "Hola, yo";

Espero que esto ayude a cualquiera que esté buscando esto en el futuro.