operator descargar caracteristicas php operators php-7 spaceship-operator

descargar - php 7 wikipedia



¿Qué es<=>(el operador ''Nave espacial'') en PHP 7? (3)

Esta pregunta ya tiene una respuesta aquí:

PHP 7, que saldrá en noviembre de este año, presentará el operador de Nave espacial (<=>). ¿Qué es y cómo funciona?

Esta pregunta ya tiene una respuesta en nuestra pregunta de referencia general sobre operadores PHP.


Es un nuevo operador para la comparación combinada. Similar al strcmp() de strcmp() o version_compare (), pero se puede usar en todos los valores genéricos de PHP con la misma semántica que < , <= , == , >= , > . Devuelve 0 si ambos operandos son iguales, 1 si la izquierda es mayor y -1 si la derecha es mayor. Utiliza exactamente las mismas reglas de comparación que utilizan nuestros operadores de comparación existentes: < , <= , == , >= y > .

wiki.php.net/rfc/combined-comparison-operator


Este operador <=> ofrecerá una comparación combinada en el sentido de que:

Return 0 if values on either side are equal Return 1 if value on the left is greater Return -1 if the value on the right is greater

Las reglas utilizadas por el operador de comparación combinado son las mismas que los operadores de comparación utilizados actualmente por PHP viz. < , <= , == , >= y > . Es posible que los expertos en programación de Perl o Ruby ya estén familiarizados con este nuevo operador propuesto para PHP7.

//Comparing Integers echo 1 <=> 1; //ouputs 0 echo 3 <=> 4; //outputs -1 echo 4 <=> 3; //outputs 1 //String Comparison echo "x" <=> "x"; // 0 echo "x" <=> "y"; //-1 echo "y" <=> "x"; //1


Según wiki.php.net/rfc/combined-comparison-operator , $a <=> $b evalúa como:

  • 0 si $a == $b
  • -1 si $a < $b
  • 1 si $a > $b

lo cual parece ser el caso en la práctica en todos los escenarios que he probado, aunque estrictamente los documentos oficiales solo ofrecen la garantía ligeramente más débil de que $a <=> $b volverá

un número entero menor que, igual o mayor que cero cuando $a es respectivamente menor, igual o mayor que $b

De todos modos, ¿por qué querrías un operador así? Una vez más, el RFC aborda esto: es casi completamente para que sea más conveniente escribir funciones de comparación para usort (y los similares uasort y uksort ).

usort toma una matriz para ordenar como su primer argumento, y una función de comparación definida por el usuario como su segundo argumento. Utiliza esa función de comparación para determinar cuál de un par de elementos de la matriz es mayor. La función de comparación debe devolver:

un entero menor que, igual o mayor que cero si se considera que el primer argumento es menor, igual o mayor que el segundo.

El operador de la nave espacial hace que esto sea breve y conveniente:

$things = [ [ ''foo'' => 5.5, ''bar'' => ''abc'' ], [ ''foo'' => 7.7, ''bar'' => ''xyz'' ], [ ''foo'' => 2.2, ''bar'' => ''efg'' ] ]; // Sort $things by ''foo'' property, ascending usort($things, function ($a, $b) { return $a[''foo''] <=> $b[''foo'']; }); // Sort $things by ''bar'' property, descending usort($things, function ($a, $b) { return $b[''bar''] <=> $a[''bar'']; });

Se pueden encontrar más ejemplos de funciones de comparación escritas usando el operador de nave espacial en la sección Usefulness del RFC.