BT

PHP 5.4: Sai o Register Globals, entra o suporte a Traits

por Jonathan Allen , traduzido por Marcelo Costa em 13 Mar 2012 |

O PHP 5.4, a maior atualização desde 2009, foi finalizado este mês. A nova versão inclui melhorias significativas na linguagem, incluindo suporte a traits, e a remoção de algumas de suas características controversas.

Traits

O PHP, assim como o .NET e o Java, faz uso de um modelo de herança simples. Embora isso seja suficiente na maioria dos cenários, há situações em que padrões comuns de codificação precisam ser repetidos em classes relacionadas (o método dispose no .NET é um bom exemplo deste tipo de código boilerplate (código que se repete em muitos lugares com pouca ou nenhuma alteração.) Para tratar esse tipo de situação, o PHP 5.4 oferece a funcionalidade de Traits.

Os traits são coleções de métodos que não pertencem a uma classe em si. Não existe uma forma de criar uma instância de um trait, ou chamar seus métodos diretamente. Em vez disso, traits devem ser incorporados a uma classe real. Quanto à precedência, um método trait substituirá um método herdado; da mesma forma, um método declarado na classe atual substituirá o método de trait.

Traits têm a mesma precedência, então por padrão é um erro usar dois traits na mesma classe, no caso em que os nomes de métodos de trait sejam iguais. Este erro pode ser evitado se os operadores "insteadof" e "as" forem utilizados para manualmente solucionar tais conflitos. O operador "as" também pode alterar a visibilidade de um trait.

Métodos de trait podem ser abstratos, o que é muito útil quando o trait pode ser apenas parcialmente generalizado. Traits também pode expor variáveis estáticas, apesar de cada classe receber sua própria cópia. Propriedades declaradas em traits não podem ser declaradas em uma classe que já faz uso daquele trait.

Outras melhorias na sintaxe da linguagem incluem:

  • Arrays agora podem ser declarados com colchetes ao invés de utilizar funções "array". Isso visualmente deixa a declaração do array um pouco menor, mas não tem efeito além disso.
  • O array dereferencing agora funciona sobre os resultados de uma função. Anteriormente, o resultado teria de ser primeiro colocado em uma variável temporária; ex.: $FirstName = GetNames ()[0]
  • Closures no PHP 5.4 podem fazer uso do ponteiro $this, o que não era permitido anteriormente.
  • O acesso a uma classe membro durante a instanciação agora é permitido: ex. (newCustomerService) -> Delete (customerId).
  • Números binários agora podem ser identificados usando o prefixo "0b".

Servidor web de linha de comando

O PHP 5.4 inclui seu próprio servidor web que pode ser iniciado a partir da linha de comando. Este servidor foi projetado apenas para fins de desenvolvimento e portanto não substitui um servidor web de produção.

Recursos removidos

O recurso Register Globals, muito criticado, finalmente foi removido do PHP. Este recurso é uma fonte bem conhecida de vulnerabilidades de segurança há mais de uma década e foi desativado por padrão desde 2002. O PHP versão 5.3, de 2009, já havia tornado a funcionalidade obsoleta.

Outra característica criticada que foi removida do PHP são as Magic Quotes, que foram uma tentativa de fazer o "escape" automático de strings numa tentativa de evitar ataques de SQL Injection. Mas como foi constatado que a forma utilizada depende do contexto, o recurso muitas vezes gerava mais problemas do que resolvia. Assim como Register Globals, o recurso havia sido marcado como obsoleto em 2009.

Declarações break e continue no PHP permitem a um parâmetro indicar quantos níveis devem ser quebrados. Quando não fornecido, a fluxo de execução sai do laço mais interno, assim como em VB, C# ou Java. Antes do PHP 5.4 desenvolvedores poderiam passar numa variável para a declaração break, agora é necessário uma constante.

O PHP permite a passagem de parâmetros por referência. Nas versões anteriores era possível informar que a variável foi passada por referência utilizando um decorator nas chamadas locais. Com o PHP 5.4, essa opção foi eliminada. Ao invés disso, a programação em PHP atual exige que o parâmetro esteja na declaração da função. Diferentemente do C#, nunca é necessário usar um parâmetro indicativo em ambas a declaração e a chamada local.

 

Olá visitante

Você precisa cadastrar-se no InfoQ Brasil ou para enviar comentários. Há muitas vantagens em se cadastrar.

Obtenha o máximo da experiência do InfoQ Brasil.

Dê sua opinião

HTML é permitido: a,b,br,blockquote,i,li,pre,u,ul,p

Receber menssagens dessa discussão
Comentários da comunidade

HTML é permitido: a,b,br,blockquote,i,li,pre,u,ul,p

Receber menssagens dessa discussão

HTML é permitido: a,b,br,blockquote,i,li,pre,u,ul,p

Receber menssagens dessa discussão

Dê sua opinião

Conteúdo educacional

Feedback geral
Bugs
Publicidade
Editorial
InfoQ Brasil e todo o seu conteúdo: todos os direitos reservados. © 2006-2013 C4Media Inc.
Política de privacidade
BT