Novidades do PHP 5.5.0

Artigo que apresenta as novidades do PHP 5.5.0, com algumas observações do autor sobre a versão alpha.

Introdução
bolo de aniversário para o PHP 5.5.0 alpha

Atenção: o PHP 5.5 foi lançado em 20/06/2013. Confira as últimas notícias sobre o Lançamento do PHP 5.5.0.

No dia 15/11/2012 foi disponibilizada a versão alpha do PHP 5.5.0, que dará início à nova geração de versões do PHP, a geração "5.5.x". E, para o incremento da versão secundária da linguagem, vieram várias melhorias notáveis. Neste post, vou apenas citar quais são as melhorias e, nos próximos posts, pretendo aprofundar nos tópicos mais interessantes.

Se você quiser baixar esta versão e testá-la, você pode acessar o link PHP QAT Web Page. Note que, junto com esta versão alpha, também foi lançada a Release Candidate do PHP 5.4.9, já que a geração 5.4.x ainda terá suporte por um tempo considerável.

As novidades do PHP 5.5.0

A lista de melhorias gerais da linguagem são:

Particularmente, o que me chamou mais a atenção foi o suporte para generators/coroutines, que permitem a criação de iteradores de forma facilitada (entre outros benefícios) e a definição da API para hashing de senha, que será bem vinda como foi o PDO para a padronização das conexões com bancos de dados.

Sobre o fim do suporte ao Windows XP e 2003, não confundam "dar suporte" com "funcionar". O que acontece é que a equipe de desenvolvimento do PHP não irá mais se preocupar com limitações específicas destes sistemas antigos para desenvolver novos recursos para a linguagem. Talvez a linguagem ainda funcione nestes sistemas por algum tempo, mas é uma boa idéia atualizar o sistema para uma versão mais atual. Aliás, recomendo que quem usa Windows XP para servidor Web, que dê uma renovada nos estudos, inclusive em servidores Unix like.


Melhorias em extensões

Segue um resumo de algumas melhorias em extensões:

  • Melhorias diversas na extensão Curl (requisições remotas)
  • Suporte para PBKDF2 na extensão hash (criptografia)
  • Melhorias diversas na extensão Intl (internacionalização)
  • O modificador /e foi depreciado na extensão PCRE (expressões regulares)
  • Melhorias de escape para extensão pgsql (PostgreSQL)

Bom, neste caso, são melhorias pouco significativas. Sobre o modificador /e do PCRE, servia para aplicar eval em expressões regulares usadas para replace, o que era pouquíssimo usado.


Conclusão

Algo que pode-se notar é que nesta versão 5.5 ainda não chegaram muitas melhorias quanto se viu, por exemplo, na versão 5.3 ou 5.4. Além disso, não foram melhorias relacionadas à POO, e sim melhorias de novas estruturas da linguagem.

Por outro lado, nota-se que a versão não apresenta muitas incompatibilidades com a geração anterior, o que é muito bom, pois quem já estava utilizando o PHP 5.4 poderá migrar com mais confiança.

Vale resaltar que a versão citada aqui ainda é alpha e isso significa que ainda podem aparecer outras novidades ou mudanças na release 5.5.0 final. Esta versão é disponibilizada exclusivamente para testes e não é recomendada para ser usada em produção.

16 comentários

Unknown disse...

Nossa, que rapido! O PHP 5.4 saiu esses dias... =P
Eu esperava que a proxima versao viesse com o suporte a unicode que tinha sido prometido...

Grande blog! Otimos artigos!
Vc escreve ou pretende escrever alguma coisa sobre o Zend Framework 2?

Abrass!

Anônimo disse...

Alguém sabe qual codificação padrão será utilizada na versão 6 do PHP: UTF-8 ou UTF-16? Já ficou resolvido?

Rubens Takiguti Ribeiro (autor do blog) disse...

Vinicius: de fato os lançamentos estão mais constantes. Mas note que a versão 5.5.0 final ainda deve levar algum tempinho para ser lançada. Esta é apenas a versão alpha. Sobre o Zend Framework, não tenho planos para postar, pois nunca o utilizei. Mas, se vier a usar, certamente posto algumas coisas.

Anônimo: a proposta do PHP 6 é o suporte a Unicode (veja http://rubsphp.blogspot.com.br/2010/10/unicode.html para entender). Isso significa dar suporte a UTF-8, UTF-16 e UTF-32. Porém, internamente, a engine do PHP pode utilizar alguma destas codificações para realizar as operações de forma transparente, realizando conversões entre elas. Não sei qual será a codificação usada pela engine, mas acredito que isso não deveria ser uma preocupação para quem usa PHP, e sim para quem desenvolvesse módulos da linguagem.

Rubens Takiguti Ribeiro (autor do blog) disse...

Olá, Erick
Como para a maioria das perguntas relacionadas a "o que é melhor" na área de computação, a minha resposta é "depende".

Em geral, é mais interessante utilizar programação orientada a objetos para sistemas maiores e que envolvem entidades bem definidas.

Por outro lado, pode ser mais viável usar programação estruturada para fazer pequenos scripts ocasionais, descartáveis ou até mesmo pequenos sistemas com escopo muito reduzido.

Na minha opinião, não é o paradigma usado que define um bom sistema. O importante é estabelecer padrões bem definidos, e deixar o código organizado e, onde necessário, bem documentado.

Rubens Takiguti Ribeiro (autor do blog) disse...

Olá, Erick
Não tenho nenhum sistema com programação estruturada. Em geral, é útil saber montar um sistema do zero, aos poucos perceber suas limitações (seja pelo paradigma usado ou outra questão qualquer) e notar que nem sempre as estratégias adotadas no início do projeto fazem tanto sentido com o decorrer do tempo.

Em todo caso, recomendo fortemente que também se envolva com programação orientada a objetos, seja para desenvolver ou seja para se aprimorar profissionalmente e estar preparado para a realidade de demanda das empresas.

José Aclides Gaspar disse...

estou com um problema com php 5.5 e as session start, para iniciar o session start funcona corretamente, mas em nva chamada em outra página era colocar o session_start () e usar as session que tinha realizado antes, mas agora no segunda pagina o session_start() apresenta erro. Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at...) como posso utilizar as session desenvolvidas. vc pode me ajudar?

Rubens Takiguti Ribeiro (autor do blog) disse...

Olá, José Alcides

O problema não é exatamente com a versão 5.5 do PHP. O problema é que quando você chama session_start, não pode ter imprimido nada anteriormente. Isso porque quando chama session_start, o PHP precisa enviar um cabeçalho HTTP para o cliente, só que se você já imprimiu algo, então o cabeçalho já pode ter ido.

Na verdade existem formas de manter o que foi impresso num buffer.

Veja sobre estes assuntos nestes artigos:
http://rubsphp.blogspot.com.br/2012/08/php-output-buffer-e-os-misterios-do-echo.html
http://rubsphp.blogspot.com.br/2012/08/php-output-buffer-e-os-misterios-do-echo-parte2.html
http://rubsphp.blogspot.com.br/2011/04/sessoes-em-php.html

José Aclides Gaspar disse...

coloquei o session start na linha 1 e mesmo assim mantem o erro.. Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at..)in.....php on line 1

Rubens Takiguti Ribeiro (autor do blog) disse...

Olá, José Alcides

Veja se existe algum conteúdo antes da abertura do código php (antes do "<?php"), inclusive espaços e quebras de linha, pois eles também são textos impressos antes da chamada do session_start.

Uma forma de descobrir o arquivo e a linha em que foi impresso alguma coisa é chamando a função headers_sent passando algumas variáveis por referência, coloque este trecho de código antes do seu session_start para depurar:

if (headers_sent($arquivo, $linha)) {
printf('algum conteudo foi impresso pelo arquivo %s na linha %d', $arquivo, $linha);
exit(0);
}

Um caso que pode estar acontecendo é que você esteja salvando este arquivo php com codificação UTF-8 com BOM. O "BOM" é uma sequência de bytes colocada no início do arquivo para indicar o tipo de Unicode que ele representa, porém, em arquivos PHP não pode ter esse BOM, pois esses bytes também são considerados textos enviados para o cliente antes da hora. Confira se você está salvando em UTF-8 com BOM e, se possível, salve sem o BOM. Se necessário, utilize outro editor de código.

Tenta aí e, qualquer coisa, mande as novidades.

Rubens Takiguti Ribeiro (autor do blog) disse...

José Alcides,
Segue um outro artigo que fala sobre cabeçalhos HTTP que pode ser de interesse, para conhecer o assunto com mais profundidade:
http://rubsphp.blogspot.com.br/2012/11/manipular-cabecalho-http-via-php.html