Promoção no ar
Tempo restante da oferta:
18 Horas
52 Min
19 Seg
Assinar →

PHP 7 e novidades do PHP 7.1

Veja um pouco mais sobre o PHP 7 e, principalmente, as novidades do PHP 7.1, recém lançado.

Kennedy Tedesco 10 anos atrás

(Apesar do final da URL desse post terminar em 7.1, prometo que não trataremos de nenhuma tragédia aqui. Vamos falar só de coisas boas!)

PHP 7

Um ano depois do lançamento da primeira grande versão do PHP, a 7.0, hoje foi lançada a primeira minor version da série, a 7.1.

Isso é algo grande! O PHP é um projeto open source e ele depende de toda uma comunidade para que as coisas aconteçam. Também é fato que, assim como outros projetos de grande porte, ele tem ajuda de algumas importantes empresas privadas que colocam à disposição a mão de obra de alguns dos seus melhores engenheiros mas, no final, todo o trabalho é altruísta: da comunidade para a comunidade. Nem vale entrar muito no mérito de que, quem participa ativamente de um projeto dessa magnitude, está não só ajudando a comunidade como a si mesmo (o que é um fato), sim, de certo é uma via de mão dupla e, cá pra nós, que pecado isso tem? Justo. Que se dê mérito e reconhecimento para quem assim os faz por merecer.

O PHP 7.0 veio com diversas features e algumas atualizações substanciais na sua engine, que foi praticamente reescrita e lançada como sendo a terceira versão: Zend Engine v3.0.0. Com essa atualização o PHP passou a ser até 2x mais rápido (em alguns casos até mais que isso) que a sua versão anterior (a 5.6) e consome bem menos memória, graças à uma grande reestruturação na sua hashtable.

Leitura recomendada para quem se interessa por algoritmos e estrutura de dados

Curso Slim - Microframework PHP Conhecer o curso

Como assim a 5.6 precede a 7.0 e não a 6.0?

Ah, uma longa história … O PHP, sim, pulou da versão 5.6 para a 7.0. Não foi na surdina da noite como fazem alguns dos nossos políticos com as suas pautas emergenciais. A decisão de pular a versão 6.0 foi discutida por várias meses e votada de forma honrosa.

Há cerca de 10 anos o PHP teve um esboço iniciado do que seria a futura versão 6.0. Mas o planejamento não foi muito legal e o core ficou bastante “prejudicado” com uma alteração importante que dava à linguagem suporte nativo a Unicode. Paralelamente a isso, versões menores continuaram a ser lançadas (como a 5.3) e não conseguiram o êxito de manter os branchs sincronizados. Com isso, naturalmente, o projeto da versão 6.0 entrou em colapso, só que, antes disso, diversos autores começaram a publicar livros sobre o “PHP 6.0” (que nem estavelmente ainda houvera sido lançado). Então, pelo bem de todos (inclusive dos futuros desenvolvedores da linguagem), decidiram pular a 6.0 e fazer tudo certinho na 7.0.

Meme “nada mal”

Novidades do PHP 7.1

O PHP 7.1 foi oficialmente lançado ontem (01/12/2016) trazendo consigo diversas melhorias. Algumas das principais:

  • Nullable Types (possibilidade de um parâmetro receber um tipo específico ou null)
  • Habilidade de pegar múltiplas exceções num mesmo bloco catch
  • Criação de um pseudo-tipo chamado Iterable
  • Habilidade de definir visibilidade para constantes de classes (public, private, protected)
  • Diversas melhorias à extensão Curl, dentre elas, suporte a HTTP/2 Server Push.
  • Tipo void para parâmetros e retornos de funções/métodos.
  • Incrementos na utilização list()
  • O suporte a mcrypt() foi removido da linguagem (tornou-se defasado devido à implementações mais atualizadas e seguras que hoje temos à disposição).

Todos os outros RFC’s aprovados e implementados na versão 7.1 você pode ver aqui: https://wiki.php.net/rfc#php_71

Se desejar ver um changelog completo da versão: http://www.php.net/ChangeLog-7.php#7.1.0

Abaixo veremos algumas dessas novidades em pequenos exemplos com código.

Nullable Types

Esse operador é identificado pelo sinal de interrogação ? quando precedido do tipo de dado da variável. Ele informa ao interpretador que é aceitável aquele tipo específico ou um valor null.

Imagine esse protótipo:

function bar(int $value) {
	if($value) {
		// todd
	} else {
		// todo
	}
}

A função bar() precisa obrigatoriamente receber um valor inteiro. Não receber nada não é uma opção, receber outro tipo, também não é.

Portanto, se tentarmos executá-la assim:

bar();

Um erro é gerado:

Uncaught TypeError: Argument 1 passed to bar() must be of the type integer, none given ...

Agora, no PHP 7.1, o desenvolvedor tem a opção de usar o operador ? antes do tipo, especificando que ele aceita dados daquele tipo ou null.

Basta que alteremos a assinatura da função:

function bar(?int $value) {

Agora sim podemos não enviar nada ou enviar null:

bar(null); // ok
bar(1); // ok
bar(0); // ok

bar(); // Erro! É preciso enviar null ou um valor do tipo que a função espera receber
bar("1"); // Erro! O tipo enviado não é inteiro.

Capturando múltiplas exceções

Antes a única opção era:

try {
    // todo
} catch (MyException1 $e) {
    // todo
} catch (MyException2 $e) {
    // todo
} catch (Exception $e) {
    // todo
}

No PHP 7.1 é possível agrupar mais de uma exceção num mesmo bloco catch:

try {
    // todo
} catch (MyException1 | MyException2 $e) {
    // todo
} catch (Exception $e) {
    // todo
}

Visibilidade para constantes de classes

Agora é possível definir as visibilidades public, protected e private para as constantes de classes:

class Squirtle extends Pokemon
{
	protected const SUPER_POWER = 100;
}

(Como você pode observar, não entendo nada de Pokemon. Perdão! :/)

Enfim. O exemplo acima deixa explícito que, acessar essa constante externamente não será possível, ou seja, isso aqui não vai funcionar:

echo Squirtle::SUPER_POWER;

Como o acesso é protegido, apenas a própria classe e sub-classes derivadas dela terão tal “poder” de acesso.

Void return

Na 7.1 é possível retornar void como sendo um tipo de retorno válido.

Exemplo:

class Squirtle extends Pokemon
{
	public function run() : void
	{
		// todo
	}
}

O método run() apenas executa uma ação, ele não retorna nada. Se tentarmos retornar algum valor (seja lá de que tipo for) uma exceção será gerada.

Curso PHP - Novidades dos PHP 7.0 e 7.1 Conhecer o curso

Pseudo-tipo iterable

O pseudo-tipo iterable informa que o parâmetro ou o retorno da função/método é algo “iterável”. Pode ser um array ou um objeto que implemente a interface Traversable.

Exemplo:

class Squirtle extends Pokemon
{
	public function change(iterable $meta) : void
	{
		foreach($meta as $key => $value) {
			// todo
		}
	}
}

Nesse caso, o parâmetro $meta só aceita um valor iterável, algo que possa ser utilizado num foreach.

Se tentarmos passar, por exemplo, um tipo primitivo, uma exceção será lançada.

Esse pseudo-tipo também pode ser usado para informar o tipo de retorno da função/método. Exemplo:

class Squirtle extends Pokemon
{
	public function getMeta() : iterable
	{
		return [1, 2, 3, 4, 5];
	}
}

Claro, se o tipo de dado que o seu método for trabalhar for, sem exceção, um array e nada mais, então não faz sentido iterable, use array.

Concluindo

Na página dos RFC’s você encontra a documentação completa de todas as features, inclusive com exemplos. Essa versão, claro, não se limitou apenas à novas features. Ela corrigiu diversos bugs, inclusive relacionados à segurança e também alterou alguns comportamentos, como o da variável especial $this. Vale muito a pena olhar cada item alterado.

O que vem pela frente? A próxima minor version, a versão 7.2. Você já pode ver o que já entrou nessa versão (ainda em desenvolvimento), clicando aqui.

Está lembrado do banner do post (com o elefante) lá em cima? Então, proclamemos: Go! Go! PHP 7.

Formação Desenvolvedor PHP Pleno Conhecer a formação

Continue lendo

Artigos relacionados

Um ano de acesso total para você viver de programação.

Todos os cursos e formações da TreinaWeb numa única assinatura, com professores que atuam no mercado, suporte direto e certificados. Do primeiro console.log ao mercado de trabalho.

  • 1 ano de acesso a todos os cursos
  • Cursos novos toda semana
  • Suporte direto com professores
  • Plano de carreira personalizado
  • Certificados digitais inclusos
  • Aplicativos para Android e iOS, com acesso offline
Garantia incondicional de satisfação

Teste por 7 dias e, se não fizer sentido para você, devolvemos seu dinheiro.

Acesso completo a todos os cursos e dezenas de Formações.

12 meses
Economize R$ 840,00 54% OFF

de 12x R$ 129,00 por apenas

12x R$ 59,00

sem juros no cartão de crédito ou R$ 599,00 à vista

Oferta termina em 18h 52min 19s

  • Acesso imediato e ilimitado durante 1 ano.
  • Plano de carreira personalizado.
  • Suporte direto com professores.
  • E muito mais!
Matricule-se agora