O que há de novo no PHP 5.4? Conheça as mudanças mais significativas.

Como você deve saber, o PHP 5.4 está às portas e ele é praticamente o PHP 6. Dia 11 de dezembro foi lançado o RC1 do PHP 5.4 e fui dar uma conferida no que há de novo. Lhe digo: é surpreendente!

Se quiser dar uma olhada na lista completa de novas features, dê uma olhada na news.

Caso ainda não saiba do que se trata o PHP 6 e qual a diferença para o PHP 5.4, dê uma olhada nesse artigo que escrevi há alguns dias: Tornando-se compatível com o PHP 6.

Agora apresento-lhes as características que, na minha opinião, são as mais bacanas dessa nova versão!

Servidor HTTP incorporado

Assim como em outras linguagens, o PHP agora também possuirá um servidor HTTP embutido. A maneira mais simples de colocá-lo para funcionar é a seguinte:

php -S localhost:8080

Isso fará com que o servidor rode na máquina local, escutando na porta 8080. Isso é muito importante para quem quer testar rapidamente um arquivo ou um sistema sem ter que configurar toda a estrutura de um servidor. Eu também uso isso (por enquanto, no Python) para compartilhar arquivos pela rede! :)

Sintaxe de array encurtada

Pra mim, uma das alterações mais importantes de todas! Agora não é mais necessário utilizar a função array() para criar vetores.

$frutas = ['Banana', 'Abacaxi', 'Laranja']
$dados = ['nome' => 'Rafael', 'profissao' => 'Professor']

Acesso de propriedades e métodos na instanciação da classe

É possível utilizar fluent interfaces, como no Java:

$meuCarro = (new Carro)->setVelocidade(100)->setCor('azul');

Typehint callable

Esse typehint permite que você passe como um parâmetro uma função, uma função anônima (closure) ou uma array composta por um nome de classe (ou objeto) e um nome de método.

function funcao(callable $func_param) {
    $func_param();
}

// No caso o $func_param() seria a mesma coisa que
// (new Carro)->ligar();

funcao([new Carro(), 'ligar']);

Suporte a valores numéricos binários

Iniciando seus números com 0b é possível definir números binários diretamente no PHP.

$binario = 0b001110;

Suporte à sintaxe Class::{expr}()

Isso fazia MUITA falta! Agora o PHP está mais flexível na hora de invocar métodos. Todas as linhas a seguir são válidas:

$metodo = 'nome_de_metodo';

$teste = new Teste();

$teste->nome_de_metodo();
$teste->$metodo();
$teste->{'nome_de_metodo'}();

Teste::nome_de_metodo();
Teste::$metodo();
Teste::{'nome_de_metodo'}();

Suporte a Traits

As traits são também conhecidas como heranças horizontais.

O PHP não suporta herança múltipla, e por esse motivo, às vezes ficamos limitados em algumas decisões de projeto (design). O maior problema neste ponto é que toda herença até agora (PHP 5.3.x) é vertical, ou seja, se eu precisar de um nível de abstração diferente no meio do processo, ou precisarei adicionar a nova abstração e reescrever tudo abaixo dela, ou ainda, terei que duplicar o código pois não conseguirei satisfazer a herença.

É nesse ponto que os Traits aparecem. Diferentemente da herença (vertical), os Traits possibilitam-nos criar heranças horizontais.

Esse trecho de texto foi retirado do blog do Hélio Costa. Lá você pode saber mais sobre as Traits. Pode também olhar no manual do PHP (em inglês).

class Base {
    public function digaOla() {
        echo 'Olá ';
    }
}

trait DigaMundo {
    public function digaOla() {
        parent::digaOla();
        echo 'mundo!';
    }
}

class MeuOlaMundo extends Base {
    use DigaMundo;
}

$o = new MeuOlaMundo();
$o->digaOla(); // Olá mundo!

Suporte a dereferenciamento de arrays

É possível acessar diretamente uma array do retorno de uma função.

function frutas() {
    return array('a' => 'amora', 'b' => 'banana', 'c' => 'caqui');
}

echo frutas()['c']; // caqui

Desempenho do silenciador (@) melhorado

Nunca recomendei o uso disso mas, de qualquer, melhoraram o desempenho deste operador, que em muitas aplicações é altamente utilizado.

$arquivo = @file_get_contents('/etc/passwd');

Progresso do Upload

De acordo com um dos desenvolvedores do PHP, teremos um medidor de progresso de upload embutido no PHP 5.4 (na versão 5.3 era um patch).

Agora é possível definir uma variável de sessão que é atualizada com o progresso de determinado upload (aleluia). Segue um exemplo:

<form action="upload.php" method="POST" enctype="multipart/form-data">
	<input type="hidden" name="<?php echo ini_get('session.upload_progress.name'); ?>" value="meu_upload" />
	<input type="file" name="arquivo1" />
	<input type="file" name="arquivo2" />
	<input type="submit" />
</form>

Confesso que espero por isso há tempos!

E outras coisinhas mais…

Existem algumas outras alterações que não são tão impactantes, mas que talvez você goste de saber:

  • Agora existe a possibilidade de desabilitar o processamento de dados do POST a fim de economizar memória e ciclos de CPU. Caso utilize isso, os dados originais ainda (raw data) ainda podem ser lidos pelo stream php://input;
  • Criaram uma interface chamada JsonSerializable, para que o objeto possa ser aceito em um json_encode() (embora o json_decode() não consiga recriar o objeto);

O que NÃO estará no PHP 5.4

Nem todas as features que foram sugeridas acabaram entrando no core do PHP 5.4.

  • Typehint Scalar para parâmetros nos métodos
  • Suporte Unicode/UTF-8 na linguagem para operações de strings :(
  • Tipos primitivos (integer, string, boolean, etc…) como palavras reservadas (foi removido por questão de retrocompatibilidade)
  • Suporte a foreach com list()

Conclusões

Espero que tenha servido para desmistificar as mudanças que vêm aí nas versões 5.4 e 6.0! :)

E você? O que mais gostou no PHP 5.4? Alguma coisa que não falei aqui? Algo que eu falei pouco? Comenta aí e deixa a tua opinião!

Um abraço a todos e fiquem com Deus!
Rafael Jaques

Fontes consultas:

21 respostas para “O que há de novo no PHP 5.4? Conheça as mudanças mais significativas.”

  1. Cezar Luiz disse:

    Uow! Todas as mudanças são muito bem-vindas! As que mais gostei foram da nova forma de criar as arrays sem precisar de chamar array(), e o outro foi de progresso de upload, sabe me dizer se isso é assíncrono?

    Acho que faltou falar o quanto melhorou o desempenho do silenciador.

    Ótimos post, valeu por trazer as novidades ;)

    • Rafael Jaques disse:

      Pelo que entendi, o upload em si não é assíncrono, mas a variável de sessão é atualizada conforme o upload é realizado. Com base nisso é possível usar um AJAX ou um outro tipo de acesso remoto… Aí é só consultar na sessão! :)

  2. Pedro Jannotti disse:

    Essas funcionalidades mostradas são excelentes, algumas delas eu esperava a implementação desde a última atualização do 5.3, mas tem algumas features que não deveriam ter sido implementadas e vão dificultar ainda mais o entendimento do código PHP.

    Não gostei da "flexibilização" da chamada de métodos através de ::, isto deveria ser uma peculiaridade de métodos estáticos como era antes. E também traits não acredito que seja um conceito bom para que o código se mantenha organizado.

    Mas enfim, esta é minha opinião, use as novas features quem desejar ;)

  3. Lucas Campelo disse:

    acredito qe o exemplo mostrado seja exatamente para funções estáticas.

    @Cezar Luiz, o @Rafael Jaques está certo. O upload é normal, mas o acesso ao progresso de upload pode ser feito atravez de ajax, ou seja, usando javascript dá pra "simular" um upload assicrono.

  4. progressbar nativo!

    mítico meu povo

    nada de flush com javascript que atualiza a largura de uma div dentro da outra!

    MÍTICOOOOOOOOOOOOOOOO

  5. JS disse:

    Atualizações bem interesantes!

    As que mais gostei foi a da barra de progresso do upload, a criação de arrays sem a função array() e de poder separar um ítem de um array retornada por função. Realmente, muito trabalho vai ser economizado.

    Sobre o upload, no caso, teríamos que consultar a session via AJAX várias vezes, e ir atualizando a barra de progresso?

  6. Igor de Paula disse:

    muita coisa boa, porem este Suporte à sintaxe Class::{expr}() ja existe desde a 5.2, eu cansei de usar…$class->$metodo() e $class->{$metodo}();

  7. Flávio disse:

    Curti realmente as mudanças, e estou buscando minha certificação tenho certeza que o PHP crescerá ainda mais.

  8. Pascoa 2012 disse:

    São bem vindas estas mudanças, algumas são meio ridículas, mas no geral gostei.

  9. Será que mexeram alguma questão de rewrite url??

  10. Rodeio disse:

    Php rlz demais!!! nunca vai acabar atualizações

  11. Agora podemos desfazer as gambiarras e rodar a nova versão do PHP com todos os recursos e sem usar gambiarras no código para implementar algo que não existia, cada vez melhor esse PHP.

  12. Android disse:

    Valeu pelos esclarecimentos, tinha dúvidas do que realmente iria mudar. Muito Obrigado.

  13. Billie disse:

    Amigos que mudanças bem vindas heim…, esse esqueminha da progressbar é showzissimo de bola

  14. barbie disse:

    não usei ainda a versão 5.4, mas gostei muito pois veio o servidor previamente já instalados, acho que é somente para rodar em localhost, se eu tiver errado mim corrijam!

  15. [...] Muitas dessas peculiaridades do Java, que podem ser consideradas implementações mais puras da orientação a objetos, podem ser integradas ao novo PHP 6. Caso você queira dar uma olhada no que vem por aí dentro do PHP, sugiro que leiam meu outro artigo: O que há de novo no PHP 5.4? Conheça as mudanças mais significativas. [...]

Deixe uma resposta