Recentemente foi disponibilizada a versão 5.4.0 do PHP e neste post eu pretendo mostrar rapidamente o que eu achei mais interessante.
Servidor web embutido.
Um recurso que eu sempre achei interessante para usar em testes quando eu desenvolvi com Ruby on Rails era o servidor web embutido, que me permitia testar rapidamente qualquer alteração realizada no projeto.
Esta versão do PHP possui um servidor web que me pareceu bastante eficiente; Eu ainda não testei ele com um projeto desenvolvido com o Zend Framework, então eu não sei dizer como ele se comporta com re-escrita de URLs, por exemplo, mas em princípio me pareceu bem legal.
Para usa-lo basta inicializa-lo dentro do diretório que você deseja que seja o Document Root, por exemplo, C:\testes ou ~/testes, e executar o comando: php -S 0.0.0.0:8080 e em seguida o servidor é inicializado permitindo o acesso ao endereço localhost:8080 pelo browser.
A porta você pode escolher qual você quiser.
Quando ele está rodando nós podemos acompanhar as requisições no terminal:
Short Array Syntax
Nós podemos criar arrays em PHP usando o construtor array() da seguinte maneira:
Ou também podemos criar definindo os índices:
Agora com o PHP 5.4 nós podemos criar usando uma sintaxe mais simples para realizar os mesmos procedimentos:
Ou então:
Um array multi-dimensional escrito da maneira a qual estamos acostumados seria assim:
Com a nova sintaxe:
Traits
Traits adiciona uma flexibilidade maior quando estamos lidando com herança.
O PHP não dá suporte a herança múltipla e os traits permitem que algumas limitações impostas pela herança simples sejam reduzidas.
Pense nas traits como uma espécie de classe abstrata, porém, sem ser uma classe ou como um agrupador de métodos.
Eu sei, é esquisito mas eu não achei nenhuma definição melhor no momento.
Bom, imagine que nós temos uma classe chamada Arquivo e esta classe deve ter uma funcionalidade de escrita e outra de leitura, porém, vamos imaginar umas situação em que nós gostaríamos que a funcionalidade de leitura estivesse em uma classe chamada LeituraArquivo e a de escrita estivesse em uma outra classe chamada EscritaArquivo e nós gostaríamos também que a nossa classe Arquivo herdasse destas outras duas.
Em PHP isso é impossível pois PHP não suporta a herança múltipla, mas agora com traits nós podemos tentar separar estas duas funcionalidades fazendo uma espécie de herança horizontal ao invés da mais comum herança vertical.
Vamos ao código.
O exemplo acima demonstra de forma simples como os traits funcionam no PHP, mas existem mais alguns detalhes que são interessantes.
Um método que existe em uma classe sobre-escreve o método definido em uma trait, vamos supor que a nossa classe Arquivo já possua implementados os métodos ler e escrever, isso tornaria os métodos das traits inúteis.
Mas se você possui uma superclasse e nela está definido um método, a trait o sobre-escreve.
Vamos supor que a nossa classe Arquivo herde de uma superclasse chamada Base e ela possua os métodos ler e escrever definidos e ver esse comportamento em ação.
É possível também definir uma chamada a um método da classe pai em um método definido em uma trait.
A trait LerArquivo foi modificada para demonstrar:
Caso haja conflito de traits é disparado um fatal error, para ilustrar este problema será adicionado um método chamado salvar em cada trait e nós solucionaremos o conflito ‘configurando’ qual trait irá ser usada para invocar o método em conflito.
Alterando a visibilidade do método
Você pode definir um método em uma trait como private por exemplo, mas na classe onde a trait for utilizada, você pode mudar a visibilidade.
Traits compostas
Até aqui estava tranquilo, mas chega uma hora que as coisas sempre começam a ficar meio esquisitas, né?
Bom, se você quiser fazer uma trait que usa outra (ou outras) isso é possível também; Abaixo estão os códigos da trait composta e da classe que a utiliza:
Métodos abstratos e estáticos
É possível definir em uma trait se um método é estático ou abstrato.
A trait LerArquivo será alterada e serão definindos um método abstrato e outro estático, posteriormente a classe Arquivo será modificada para contemplar estas mudanças:
As traits também permitem definir propriedades, mas, algo que deve ser levado em conta é que se a classe que usar a trait definir uma propriedade com o mesmo nome que a propriedade definida na trait, você poderá receber um aviso E_STRICT caso o nome da propriedade e o valor sejam os mesmos ou um FATAL_ERROR caso o nome seja o mesmo e o valor não. Use com cuidado.
O PHP 5.4.0 além destas novas funcionalidades trouxe dezenas de correções de bugs, melhorias na performance, remoçõa de funcionalidades legadas como a função register_globals, entre outras coisas que você pode ver no changelog.
Espero que o post tenha sido útil, até o próximo.



