PHP
Operador de comparação combinada no PHP 7 (Spaceship)

Vamos aprender neste artigo, como utilizar o novo operador de comparação combinada introduzido no PHP 7 (mais conhecido como spaceship), similar as funções strcmp()
e version_compare(),
porém podendo ser utilizado com qualquer valor do PHP.
Veja abaixo a sintaxe do operador:
(exp) <=> (exp)
Onde (exp)
é substituído por valores que serão usados na comparação, vejamos abaixo um exemplo real:
<?php var_dump(1 <=> 2); // int(-1)
Muito bom! Mas porque a comparação acima retornou um -1? Muito simples, a lógica do resultado é a seguinte:
- Se ambas expressões forem igual, então retorna 0;
- Se a expressão da esquerda for maior, então retorna 1;
- Se a expressão da direita for maior, então retorna -1;
Para compreendermos melhor, vamos aplicar isso no código, vejam os exemplos abaixo:
<?php // int echo 1 <=> 1; // 0 echo 1 <=> 2; // -1 echo 2 <=> 1; // 1 // float echo 1.5 <=> 1.5; // 0 echo 1.5 <=> 2.5; // -1 echo 2.5 <=> 1.5; // 1 // string echo "a" <=> "a"; // 0 echo "a" <=> "b"; // -1 echo "b" <=> "a"; // 1 echo "a" <=> "aa"; // -1 echo "zz" <=> "aa"; // 1 // array echo [] <=> []; // 0 echo [1, 2, 3] <=> [1, 2, 3]; // 0 echo [1, 2, 3] <=> []; // 1 echo [1, 2, 3] <=> [1, 2, 1]; // 1 echo [1, 2, 3] <=> [1, 2, 4]; // -1 // object $a = (object) ["a" => "b"]; $b = (object) ["a" => "b"]; echo $a <=> $b; // 0
Vamos avançar um pouco mais e criar uma função para comparar dois números, porém queremos que a função não apenas compare se é maior, mas também compare se são iguais, ou menor. Anteriormente ao PHP 7 utilizávamos o operador ternário, como o exemplo abaixo:
<?php // before PHP7 function intCompare(int $n1, int $n2) : int { return ($n1 < $n2) ? -1 : (($n1 > $n2) ? 1 : 0); } var_dump(intCompare(1, 2)); // int(-1)
Com o novo operador do PHP 7, podemos fazer algo do tipo:
<?php // with PHP7 function intCompare(int $n1, int $n2) : int { return $n1 <=> $n2; } var_dump(intCompare(1, 2)); // int(-1)
Percebam que com o uso deste operador nossa função fica mais “clean”.
Pessoal chegamos ao final deste artigo, espero que gostem, um forte abraço e até a próxima!