¿Cuál es el significado de Tres puntos (...) en PHP?
Mientras instalo Magento 2 en mi servidor, recibí un error. Investigue el código y descubrió que hay un punto Tres (...), que está produciendo el error. Mencioné el código a continuación
return new $type(...array_values($args));
Respuestas:
El
...$str
se llama operador splat en PHP .Esta característica le permite capturar un número variable de argumentos para una función, combinados con argumentos "normales" pasados si lo desea. Es más fácil de ver con un ejemplo:
La lista de parámetros en la declaración de la función tiene el
...
operador, y básicamente significa "... y todo lo demás debe ir en $ strings". Puede pasar 2 o más argumentos a esta función y el segundo y los siguientes se agregarán a la matriz $ strings, listos para usarse.¡Espero que esto ayude!
fuente
[
y]
. No es un gran beneficio, pero creo que se ve bien.function myFunc($foo, string ...$bar)
. Luego$bar
le da a su función una matriz de cadenas y nada más, garantizada en tiempo de ejecución. No puede hacer eso con un solo parámetro de matriz.function get_data($fname,$lname,$age)
tendrá que cambiar si desea que los campos que no sean esos tresfunction get_data(...$fields)
no tengan que cambiar, solo necesita especificar los campos que desea$fields
. @heykatiebenCada respuesta se refiere a la misma publicación de blog, además de ellos, aquí está la documentación oficial sobre listas de argumentos de longitud variable :
http://php.net/manual/en/functions.arguments.php#functions.variable-arg-list
Parece que el operador "splat" no es un nombre oficial, ¡pero es lindo!
fuente
Hay DOS usos para el token PHP de puntos suspensivos (...); piense en ellos como empaquetar una matriz y desempaquetar una matriz. Ambos propósitos se aplican a los argumentos de funciones.
Paquete
Al definir una función, si necesita un número dinámico de variables proporcionadas a la función (es decir, no sabe cuántos argumentos se proporcionarán a esa función cuando se llame en el código) use el token de puntos suspensivos (...) para capturar todos los argumentos restantes proporcionados a esa función en una matriz que sea accesible dentro del bloque de funciones. El número de argumentos dinámicos capturados por puntos suspensivos (...) puede ser cero o más.
Por ejemplo :
Cuando se usa el empaquetado en la creación de instancias de funciones, la elipsis (...) captura todos los argumentos restantes , es decir, aún puede tener cualquier número de argumentos iniciales fijos (posicionales):
Deshacer
Alternativamente, al llamar a una función, si los argumentos que le proporcionas a esa función se han combinado previamente en una matriz, usa el token de puntos suspensivos (...) para convertir esa matriz en argumentos individuales proporcionados a la función; cada elemento de la matriz se asigna a la respectiva variable de argumento de función nombrada en la definición de función.
Por ejemplo:
El desempaquetado es particularmente útil cuando se utilizan funciones de matriz para manipular matrices o variables.
Por ejemplo, desempaquetando el resultado de array_slice :
fuente
Para usar esta función, simplemente advierta a PHP que necesita descomprimir la matriz en variables usando
... operator
. Consulte aquí para obtener más detalles, un ejemplo simple podría verse así:fuente
El significado es que descompone una matriz asociativa en una lista. Por lo tanto, no necesita escribir N parámetros para llamar a un método, solo uno. Si el método permite un parámetro descompuesto y si los parámetros son del mismo tipo.
Para mí, lo más importante sobre el operador splat es que puede ayudar a escribir parámetros de matriz de sugerencias:
ahorra algo de esfuerzo en el control de tipos, especialmente cuando se trabaja con colecciones enormes o muy orientadas a objetos.
Es importante tener en cuenta que
...$array
descompone una matriz a pesar del tipo de sus elementos , por lo que también puede seguir el camino más feo:Pero por favor no lo hagas.
fuente
Este es el llamado operador "splat". Básicamente, eso se traduce en "cualquier número de argumentos"; introducido con PHP 5.6
Consulte aquí para obtener más detalles.
fuente
Parece que nadie lo ha mencionado, así que aquí para quedarse [También ayudará a Google (y otros SE) a guiar a los desarrolladores que soliciten parámetros de descanso en PHP ]:
Como se indica aquí, se llama Parámetros de descanso en JS y prefiero este nombre significativo sobre esa cosa de splat.
En PHP, la funcionalidad proporcionada por ... args se llama funciones Variadic que se introdujo en PHP5.6. Se utilizó la misma funcionalidad para implementar utilizando
func_get_args()
.Para usarlo correctamente, debe usar la sintaxis de los parámetros de descanso, en cualquier lugar donde ayude a reducir el código repetitivo .
fuente
Me gustaría compartir un uso de este operador en el marco de Magento, donde instancia objetos con parámetros configurables dinámicos (archivos de configuración XML pensados).
Como podemos ver la
createObject
función del siguiente fragmento de código, toma una matriz de los argumentos preparados para la creación del objeto. Luego usa el...
operador (tres puntos) para pasar los valores de la matriz como argumentos reales al constructor de la clase.fuente
es un operador de splat o scatter en PHP
referencia: splat o operador de dispersión en PHP
fuente
En PHP 7.4, la elipsis también es el operador Spread :
Fuente: https://wiki.php.net/rfc/spread_operator_for_array
fuente