terça-feira, 5 de janeiro de 2016

PHP 7

O PHP 7 já está funcionando com várias novidades.
Na maioria dos lugares li que o desempenho está bem melhor, porém não vou verificar isso neste post.

Separei aqui, as novidades que mais me agradaram e vou tentar mostrar alguns exemplos.
Infelizmente o PHP 7 não é suportado no codepad, então não será possível testar os códigos da maneira tradicional do blog. Para eu testar os códigos foi necessário fazer o download do código fonte e compilá-lo, usei o tutorial do link a seguir tecmint install and compile php 7.

Tipagem dos parâmetros com tipos primitivos
Antes só era possível com arrays, classes ou interfaces.
Analisando a saída do var_dump do código abaixo, é possível notar que os parâmetros são convertidos para a tipagem definida. Na primeira chamada da função concatena é passado um valor numérico que é convertido para string.
<?php

function concatena(string $a, string $b){
 var_dump($a,$b);
 return $a.$b;
}

function mult(float $a, float $b){
 var_dump($a,$b);
 return $a*$b;
}

echo concatena('teste',1),"\n";
echo mult('12.1','13'),"\n";

RFC do PHP

Tipagem do retorno da função ou método
Isso é muito interessante, pois pode ajudar o autocompletar das IDEs e facilita perceber a intenção do método ou da função.
<?php

function concatena(string $a, string $b) : string{
 var_dump($a,$b);
 return $a.$b;
}

function mult(float $a, float $b) : float{
 var_dump($a,$b);
 return $a*$b;
}

echo concatena('teste',1),"\n";
echo mult('12.1','13'),"\n";
RFC do PHP

NULL COALESCE OPERATOR
No código abaixo existem três trechos que tem a mesma finalidade.
A adição do operador ?? reduz e simplifica a sintaxe.
<?php

$array = array(
 'nome' => 'Programando no Aquário'
);
//trecho1
$apelido = $array['nome'];
if(isset($array['apelido'])){
 $apelido = $array['apelido'];
}
//trecho2
$apelido = isset($array['apelido']) ? $array['apelido'] : $array['nome'];

//trecho3
$apelido = $array['apelido'] ?? $array['nome'];

echo $apelido,"\n";
RFC do PHP

Classes anônimas
Este recurso já estava presente na maioria das linguagens O.O., finalmente foi implementado no PHP.
<?php

function translate(string $key) : string{
 $words = array(
  'hi' => 'Olá'
 );
 return $words[$key] ?? $key; 
}

function lazy_translate($key){
 return new class($key){
  private $key;
  public function __construct($key){
   $this->key = $key;
  }
  public function __toString(){
   return translate($this->key);
  }
 };
}

var_dump(lazy_translate('hi'));
echo lazy_translate('hi'),"\n";

RFC do PHP

Obrigado!

Algumas referências:
http://tableless.com.br/10-novidades-do-php-7/
http://www.profissionaisti.com.br/2015/09/10-novidades-do-php-7/
https://medium.com/tenha-perspectiva/principais-novidades-do-php-7-6821683fc9a#.c1b9xpe2t