miércoles, 8 de abril de 2015

PHP 5.6 y el operador Splat

Tenemos un par de nuevas caracteristicas que vienen a PHP 5.6 con nombres que suenan mucho menos interesantes de lo que realmente representan "funciones variadicas" suena positivamente academica, y "desempaquetado de argumento" no es exactamente atrayente. Sin embargo ambos utilizan un nuevo operador en PHP que parece una elipsis (tres puntos ...) y que se conoce como operador de splat o el operador de dispersion. 

Funciones variadicas

Esta caracteristica le permite capturar un numero variable de argumentos a una funcion, combinada con argumentos "normales" aprobadas en si lo desea. Es mas facil de ver con un ejemplo:

 <?php
 function concatenate($transform, ...$strings){
  $string = '';
  foreach($strings as $piece){
   $string .= $piece;
  }
  return ($transform($string));
 }

 echo concatenate("strtoupper","I'd ","Like ", 4+2 , " Apples");
?>

La lista de parametros en la declaracion de la funcion tiene el operador ..., que basicamente significa "... y todo lo demas debe ir en $strings" puede pasar 2 o mas argumentos en esta funcion y la segunda y siguientes se añadira en el array $strings, listo para ser utilizado.

Desempaquetar argumentos

Este tiene un nombre menos sexy que las funciones variadicas, y utiliza el mismo operador pero este es el que me hizo describo codigo PHP como "salvaje" - no es algo que sucede a menudo! Me gusta por que ofrece una forma diferente de utilizar las funciones que ya existen por lo que hace pertinente tan pronto como actualizar a 5.6. 
Las funciones variadicas le permite declarar un array como parametros de entrada, y desempaquetar argumentos le permite pasar un array a una funcion que espera parametros distintos en la forma tradicional; son absolutamente complementarias entre si. Para usar esta funcion, simplemente advertir a PHP que necesita para desempaquetar el array en las variables utilizando el operador ... Un ejemplo sencillo podria tener este aspecto:


 <?php
 $email[] = "Hi there";
 $email[] = "Thanks for registering, hope you like it";

 mail("someone@example.com", ...$email);
?>


Puede pasar todos los argumentos en forma de array (consejo pro: array asociativos no funcionan aqui), o simplemente el ultimo, PHP toma su matriz y pasa cada elemento como parametro siguiente a su vez. Creo que esto es bastante ordenado :).


Fuente: http://www.lornajane.net/posts/2014/php-5-6-and-the-splat-operator

No hay comentarios:

Publicar un comentario en la entrada