Tengo una función PHP que toma un número variable de argumentos (usando func_num_args()y func_get_args()), pero el número de argumentos que quiero pasar a la función depende de la longitud de una matriz. ¿Hay alguna forma de llamar a una función PHP con un número variable de argumentos?
php
variadic-functions
Sin sombrero
fuente
fuente

Respuestas:
Si tiene sus argumentos en una matriz, es posible que le interese la
call_user_func_arrayfunción.Si la cantidad de argumentos que desea pasar depende de la longitud de una matriz, probablemente signifique que puede empaquetarlos en una matriz ellos mismos, y usar ese para el segundo parámetro de
call_user_func_array.Los elementos de esa matriz que pase serán recibidos por su función como parámetros distintos.
Por ejemplo, si tiene esta función:
Puede empaquetar sus parámetros en una matriz, como esta:
Y, luego, llame a la función:
Este código será el resultado:
es decir, 3 parámetros; exactamente como iof la función se llamó de esta manera:
fuente
Esto ahora es posible con PHP 5.6.x , usando el operador ... (también conocido como operador splat en algunos idiomas):
Ejemplo:
fuente
En un nuevo Php 5.6 , puede usar en
... operatorlugar de usarfunc_get_args().Entonces, usando esto, puede obtener todos los parámetros que pasa:
fuente
Desde PHP 5.6 , se puede especificar una lista de argumentos variables con el
...operador.Como puede ver, el
...operador recopila la lista variable de argumentos en una matriz.Si necesita pasar los argumentos de la variable a otra función,
...aún puede ayudarlo.Desde PHP 7 , la lista de variables de argumentos puede ser obligado a ser todos del mismo tipo también.
fuente
Para aquellos que buscan una forma de hacer esto con
$object->method:Tuve éxito con esto en una función de construcción que llama a una variable nombre_método con parámetros variables.
fuente
$object->method_name(...$array);$object->method_name(&...$args);Puedes simplemente llamarlo.
Salida:
Matriz ([0] => bla) Matriz ([0] => bla [1] => bla)
fuente
Me sorprende que nadie aquí haya mencionado simplemente pasar y extraer una matriz. P.ej:
Por supuesto, esto no proporciona una validación de argumentos . Para eso, cualquiera puede usar mi función de espera: https://gist.github.com/iautomation/8063fc78e9508ed427d5
fuente
Una vieja pregunta, lo sé, sin embargo, ninguna de las respuestas aquí realmente hace un buen trabajo simplemente para responder la pregunta.
Acabo de jugar con php y la solución se ve así:
Esta función puede hacer dos cosas:
Si se llama solo con el parámetro requerido:
myFunction("Hi")imprimirá "Hola predeterminado"Pero si se llama con el parámetro opcional:
myFunction("Hi","me")imprimirá "Hola";Espero que esto ayude a cualquiera que esté buscando esto en el futuro.
fuente
Aquí hay una solución usando el método mágico __invoke
(Disponible desde php 5.3)
Desde dentro de la misma clase:
Desde una instancia de un objeto:
fuente
call_user_func_arraycomo se indica en la respuesta más votada en 2009. Tal vez tenga sentido envolverlo con un extra__invoke, pero no lo veo.