O PHP 7 está prestes a ser lançada oficialmente, até o final deste ano de 2015.
A versão Release Candidate (RC) do PHP 7 foi lançada no dia 21 de agosto. Sendo uma versão RC, não haverá implementações novas no PHP 7.0, apenas correções de bugs.
Vou apresentar aqui algumas novidades e recursos novos desta versão do PHP.
1. Desempenho Fantástico
O PHP 7 teve seu motor remodelado. Com isso, houve um grande ganho de desempenho.
Em alguns casos, é possível alcançar até 9 vezes mais velocidade. Mas esse número pode variar conforme a plataforma e a aplicação utilizada nos testes.
Eu utilizei o script para benchmark criado pela própria equipe do PHP, disponibilizado junto com o código-fonte da linguagem. Em comparação com a versão 5.6, consegui aproximadamente 9 vezes mais velocidade usando o PHP 7. Expliquei esse teste com mais detalhes neste meu artigo.
2. MySQL Removido
Desde o PHP 5.5, as funções mysql_* eram consideradas obsoletas. Ou seja, tudo indicava que elas seriam removidas em um futuro bem próximo.
Pois bem. A hora chegou.
No PHP 7, as funções mysql_* (como mysql_connect(), mysql_query() e outras) deixaram de existir. Agora é preciso utilizar MySQLi ou PDO.
Recomendo utilizar PDO, por ser mais robusta e ser independente de SGBD.
3. Funções ereg_*
Removidas
Além das funções mysql_*, as funções ereg_* e eregi_* (como ereg(), ereg_replace, eregi() e outras) eram consideradas obsoletas desde o PHP 5.3.
Elas também foram removidas no PHP 7.
Agora é preciso usar as funções preg_*, da biblioteca PCRE, como preg_match e preg_replace.
As funções preg_* exigem delimitadores. Consequentemente, é possível utilizar modificadores, como “i” e “u”. O “i”, por exemplo, significa case-insensitive. Ou seja, se você usava eregi_*, passará a usar preg_*, sempre com o modificador “i”.
4. Erros Fatais e Exceções
No PHP 7, erros fatais passaram a ser Exceções. Isso quer dizer que eles podem ser tratados em bloco try/catch, sem interromper a execução do script.
Para exemplificar, vamos executar este código (no PHP 7, não no PHP 5):
ereg('^[a-z]$', 'php7'); echo "FIM";
Veremos este erro:
Fatal error: Uncaught Error: Call to undefined function ereg()...
E o texto “FIM” não será exibido. Isso ocorre, pois a exceção interrompe o script.
Agora execute este script:
try { ereg('^[a-z]$', 'php7'); } catch (Error $e) { echo "Ocorreu um erro: " . $e->getMessage(); } echo "FIM";
Você verá a seguinte saída:
Ocorreu um erro: Call to undefined function ereg() FIM
Ou seja, nossa aplicação tratou a exceção e a execução continuou normalmente.
5. Construtores do PHP 4 Obsoletos
Antes do PHP 5, os construtores recebiam o mesmo nome da classe. Por exemplo:
class ClassePHP4 { function ClassePHP4() { echo "Construtor chamado"; } }
Isso continuou funcionando no PHP 5, mas era recomendado usar o método __construct
, ficando desta forma:
class ClassePHP5 { public function __construct() { echo "Construtor chamado"; } }
O PHP 7 recomenda que seja usado método __construct
em vez do método com o mesmo nome da classe. Ou seja, o uso de construtores no padrão do PHP 4 continuará sendo possível, mas é um recurso obsoleto (Deprecated).
Para testar isso, vamos executar este código:
6. Indução de Tipos: Scalar Types
PHP é uma linguagem NÃO tipada.
Aos poucos ela vem ganhando alguns recursos que a torna fracamente tipada.
Isso significa que podemos criar códigos mais consistentes e menos suscetíveis a erros e problemas.
O PHP 5 já possui o recurso de Indução de Tipos. É possível definir alguns tipos para parâmetros de métodos e funções. Mas só é possível definir dois tipos: arrays (o tipo “array”) e objetos (com o nome da classe).
A partir do PHP 7, poderemos usar outros tipos também: int, float, string e bool.
Esses tipos podem ser definidos nos parâmetros de funções e métodos, como já era feito no PHP 5. Mas agora há uma novidade: também poderemos definir o tipo do retorno.
7. Tipo de Retorno de Funções e Métodos
Seguindo a mesma ideia da Indução de Tipos que vimos anteriormente, o PHP 7 vai permitir definir o tipo de retorno de uma função ou método.
Basta seguir esta sintaxe:
function nomeFuncao() : tipo { // corpo da função }
Por exemplo:
function soma($x, $y) : float { return $x + $y + 1.5; }
E, claro, pode usar todos os tipos suportados: int, float, string, bool, array e objeto.
8. Novo Operador Spaceship (
)
Esse operador recebe o nome de “Spaceship” em algumas outras linguagens, e é usado para comparação numérica.
Se você já usou a função strcmp()
, com certeza vai entender esse operador sem dificuldades.
Mesmo se não usou, é simples de entender.
Veja estes exemplos:
var_dump(2 3); // retorna -1 var_dump(2 2); // retorna 0 var_dump(2 1); // retorna 1
Ou seja, o operador retorna um destes 3 valores:
– retorna -1 quando o primeiro operando é menor que o segundo
– retorna 0 quando os dois operandos são iguais
– retorna 1 quando o segundo operando é maior que o primeiro
9. Null Coalesce Operator (operador ??
)
O nome parece complicado, mas ele faz algo bem simples. Ele é útil para verificar a existência de variáveis, como fazemos com valores de $_GET
ou $_POST
, usando isset
.
Ele faz com que esta linha:
$email = $_POST['email'] ?? 'valor padrão';
… seja transformada nesta:
$email = isset($_POST['email']) ? $_POST['email'] : 'valor padrão';
Super simples!
10. Classes Anônimas
O PHP, a partir da versão 5.4, permite a criação de Funções Anônimas. Elas são úteis especialmente para criação de callbacks ou para usar em parâmetros de funções, como array_map()
.
A partir do PHP 7, podemos criar Classes Anônimas também.
Podemos, por exemplo, fazer uma função retornar uma classe, definida ns própria expressão return
:
function createObject() { return new class{ public function test() { echo "test" . PHP_EOL; } }; } $obj = createObject(); $obj->test();
Há outros casos de uso, como em testes de software. Você pode ver a proposta e alguns casos de uso no RFC que descreve esse recurso.
Conclusão
O PHP 7 traz diversas novidades. E, se você seguia as Boas Práticas e padrões que o PHP recomendava, a partir da versão 5.5, provavelmente terá pouquíssimos problemas (ou nenhum) para migrar para o PHP 7.
Se quiser conhecer melhor essas novidades e algumas outras, criei um curso gratuito, onde mostro com mais detalhes cada um desses novos recursos. Também mostro como instalar o PHP 7, sem afetar a sua instalação atual do PHP 5.
Bons estudos e fique de olho no PHP 7!
1 Comentários
Excelente post mas uma correção no 9. Null Coalesce Operator (operador ??)
Vc inverteu as mudanças
Ele faz com que esta linha:
$email = $_POST[‘email’] ?? ‘valor padrão’;
… seja transformada nesta:
$email = isset($_POST[‘email’]) ? $_POST[‘email’] : ‘valor padrão’;
Seria ao contrário
Com relação a velocidade disseram que chegava até 9x mais rápido mas ao meu ver não é bem assim não, teste da zend disseram que está 140% mais veloz e performático, mas depende mesmo como você disse, eu acho mais possível no segundo caso, por que milagre não vai fazer da 5.6 da 7 (Ou 6 kkk)
Abraços e tudo bom RBeraldo