PHP 7 e novidades do PHP 7.1 \| TreinaWeb               Promoção no ar   Matricule-se agora e garanta **54% de desconto**  

  Termina em   Tempo restante da oferta: 17 Horas 

 50 Min 

 41 Seg 

   Tempo restante da oferta: 17 50 41 

  [Assinar →](https://www.treinaweb.com.br/checkout/pagamento/plano/anual?cupom=TW-SCLIENTE26) 

   [                ](https://www.treinaweb.com.br)  Explorar  

 [ Quanto custa? ](#assinatura) [ FAQ ](https://www.treinaweb.com.br#faq) [Matricule-se](#assinatura) [ Entrar ](https://www.treinaweb.com.br/login) 

     [ Início ](https://www.treinaweb.com.br) [ Artigos ](https://www.treinaweb.com.br/blog) PHP 7 e novidades do PHP 7.1  [ PHP ](https://www.treinaweb.com.br/blog/categoria/php) 

# 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 ](https://www.treinaweb.com.br/blog/autor/kennedy-tedesco) 10 anos atrás

  ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2021/05/php7.jpg)  

*(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](https://www.treinaweb.com.br/blog/o-que-e-php/ "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](https://nikic.github.io/2014/12/22/PHPs-new-hashtable-implementation.html)

[  ![Magento - Criação de lojas virtuais Básico](https://d2knvm16wkt3ia.cloudfront.net/assets/svg-icon/magento.svg)   Curso Magento - Criação de lojas virtuais Básico Conhecer o curso ](https://www.treinaweb.com.br/curso/magento-2-criacao-de-lojas-virtuais-basico)

###### 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”](https://d2m498l008ebpa.cloudfront.net/2016/12/tumblr_lltzgnHi5F1qzib3wo1_400.jpg)

## 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](https://wiki.php.net/rfc#php_71 "https://wiki.php.net/rfc#php&#95;71")

Se desejar ver um *changelog* completo da versão: [http://www.php.net/ChangeLog-7.php#7.1.0](http://www.php.net/ChangeLog-7.php#7.1.0 "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:

```php
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:

```php
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:

```php
function bar(?int $value) {

```

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

```php
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:

```php
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**:

```php
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:

```php
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:

```php
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:**

```php
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.

[  ![PHP - Novidades dos PHP 7.0 e 7.1](https://d2knvm16wkt3ia.cloudfront.net/assets/svg-icon/php7.svg)   Curso PHP - Novidades dos PHP 7.0 e 7.1 Conhecer o curso ](https://www.treinaweb.com.br/curso/novidades-do-php-7-e-7-1)

#### 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*](http://php.net/manual/pt_BR/class.traversable.php%5D).

**Exemplo:**

```php
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:

```php
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](https://wiki.php.net/rfc#php_71) 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*](https://wiki.php.net/rfc/this_var). 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](https://wiki.php.net/rfc#php_next_72).

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

[  ![Desenvolvedor PHP Pleno](https://d2knvm16wkt3ia.cloudfront.net/assets/svg-icon/php.svg)   Formação Desenvolvedor PHP Pleno Conhecer a formação ](https://www.treinaweb.com.br/formacao/desenvolvedor-php-pleno)

- [ #PHP ](https://www.treinaweb.com.br/blog/tag/php)

Autor

 ![Kennedy Tedesco](//secure.gravatar.com/avatar/236c86e9469327ba7a9250ff15fef424?d=mm)

## Kennedy Tedesco

 Head de desenvolvimento. Vasta experiência em desenvolvimento Web com foco em PHP. Graduado em Sistemas de Informação. Pós-graduando em Arquitetura de Software Distribuído pela PUC Minas. Zend Certified Engineer (ZCE) e Coffee Addicted Person (CAP). [@KennedyTedesco](https://twitter.com/KennedyTedesco) 

 [Todos os artigos](https://www.treinaweb.com.br/blog/autor/kennedy-tedesco)  

## Continue estudando

 Transforme leitura em prática com os cursos e formações da TreinaWeb.

 [Ver cursos](https://www.treinaweb.com.br/cursos)   

  Continue lendo

## Artigos relacionados

- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2017/10/24121508/novidades-do-php-7-2-400x280.jpg)  [ PHP ](https://www.treinaweb.com.br/blog/categoria/php) 

     9 anos atrás

    ##  [ Novidades do PHP 7.2 ](https://www.treinaweb.com.br/blog/novidades-do-php-7-2) 

     Quase um ano depois da última versão, o PHP 7.2 bate à porta. Saiba tudo sobre essa versão. O que de novo entrará e o que será descontinuado.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2020/11/como-usar-attritutes-annotations-no-php-8-400x280.png)  [ PHP ](https://www.treinaweb.com.br/blog/categoria/php) 

     6 anos atrás

    ##  [ Como usar Attributes/Annotations no PHP 8 ](https://www.treinaweb.com.br/blog/como-usar-attributes-annotations-no-php-8) 

     Aprenda como utilizar attributes no PHP 8. Veja o que são, qual a sintaxe e como obter os dados das annotations na prática.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2020/11/como-usar-parametros-nomeados-no-php-400x280.png)  [ PHP ](https://www.treinaweb.com.br/blog/categoria/php) 

     6 anos atrás

    ##  [ Como usar parâmetros nomeados no PHP ](https://www.treinaweb.com.br/blog/como-usar-parametros-nomeados-no-php) 

     Aprenda como usar parâmetros nomeados no PHP, qual sua sintaxe e suas principais vantagens em relação aos parâmetros posicionais.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2023/07/DICA-CODIGO-PHP-400x280.jpg)  [ PHP ](https://www.treinaweb.com.br/blog/categoria/php) 

     3 anos atrás

    ##  [ Dica de Código: Arrow Functions no PHP ](https://www.treinaweb.com.br/blog/dica-de-codigo-arrow-functions-no-php) 

     Aprenda a usar Arrow Functions no PHP para tornar seu código mais conciso e poderoso. Confira exemplos práticos e dicas essenciais.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/1970/01/17204640/como-comecar-com-php-400x280.jpg)  [ PHP ](https://www.treinaweb.com.br/blog/categoria/php) 

     9 anos atrás

    ##  [ Como começar com PHP? ](https://www.treinaweb.com.br/blog/como-comecar-com-php) 

     Quer iniciar seus estudos em PHP e não sabe por onde começar? Veja o que preparamos pra você.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2021/05/a6GH8712a1-400x280.jpg)  [ PHP ](https://www.treinaweb.com.br/blog/categoria/php) 

     10 anos atrás

    ##  [ O PHP e o seu ecossistema nunca estiveram tão fortes ](https://www.treinaweb.com.br/blog/o-php-e-o-seu-ecossistema-nunca-estiveram-tao-fortes) 

     O PHP nunca esteve tão forte. Nesse artigo, algumas desconstruções de famosas falácias acerca do PHP e alguns pontos que o fazem ser uma completa plataforma para a Web.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2019/04/15190654/FRAMEWORKS-PHP-400x280.png)  [ PHP ](https://www.treinaweb.com.br/blog/categoria/php) 

     8 anos atrás

    ##  [ Os principais Frameworks PHP ](https://www.treinaweb.com.br/blog/os-principais-frameworks-php) 

     Neste artigo falaremos brevemente sobre os principais Frameworks PHP do mercado.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2022/05/O-QUE-E-PHP-400x280.png)  [ PHP ](https://www.treinaweb.com.br/blog/categoria/php) 

     5 anos atrás

    ##  [ Guia da linguagem PHP ](https://www.treinaweb.com.br/blog/guia-da-linguagem-php) 

     Nesse guia de PHP você aprenderá o necessário para criar os seus primeiros softwares com a linguagem de programação PHP. Acesse agora mesmo!

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2017/11/13144017/sindrome-impostor-voce-sabe-o-que-e-400x280.jpg)  [ Carreira ](https://www.treinaweb.com.br/blog/categoria/carreira) 

     9 anos atrás

    ##  [ Síndrome do Impostor: você sabe o que é? ](https://www.treinaweb.com.br/blog/sindrome-impostor-voce-sabe-o-que-e) 

     Entenda como a síndrome do impostor se manifesta e o que podemos fazer para combatê-la.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2019/06/11153116/symfony-projeto-e-crud-400x280.png)  [ PHP ](https://www.treinaweb.com.br/blog/categoria/php) 

     8 anos atrás

    ##  [ Iniciando com Symfony: Como criar o projeto e seu primeiro CRUD ](https://www.treinaweb.com.br/blog/iniciando-com-symfony-como-criar-o-projeto-e-seu-primeiro-crud) 

     Nesse artigo veremos como criar o primeiro projeto no Symfony. Falaremos sobre qual tipo de estrutura escolher dependendo da aplicação e como criar o primeiro CRUD utilizando o comando make.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2019/06/05115515/EDITORES-CÓDIGOS-400x280.png)  [ Tecnologia ](https://www.treinaweb.com.br/blog/categoria/tecnologia) 

     8 anos atrás

    ##  [ Principais editores de código para desenvolvimento ](https://www.treinaweb.com.br/blog/principais-editores-de-codigo-para-desenvolvimento) 

     Neste artigo veremos alguns editores de código para utilizar na criação de seus projetos.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2018/11/06104639/TW-ENTREVISTAS-FABIO-400x280.png)  [ Desenvolvimento Web ](https://www.treinaweb.com.br/blog/categoria/entrevistas-desenvolvimento-web) 

     8 anos atrás

    ##  [ TW Entrevista 08: Fabio Costa ](https://www.treinaweb.com.br/blog/tw-entrevista-08-fabio-costa) 

     Fizemos uma série de entrevistas chamada "TW Entrevista". O entrevistado de hoje é o Fabio Costa, desenvolvedor que já trabalhou na Globo.com, no Facebook e agora está na GoDaddy.

     Ler artigo

## 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  **17h 50min 41s**

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

 [Matricule-se agora](https://www.treinaweb.com.br/checkout/pagamento/plano/anual?cupom=TW-SCLIENTE26)

     [                ](https://www.treinaweb.com.br)

 Escola online de programação, tecnologia e IA.

- [  ](https://www.facebook.com/TreinaWeb/)
- [  ](https://www.instagram.com/treinaweb/)
- [  ](https://www.youtube.com/user/TreinaWeb)
- [  ](https://twitter.com/treinaweb)
- [  ](https://www.linkedin.com/company/treinaweb)
- [  ](https://github.com/treinaweb)

## Inscreva-se em nossa newsletter

Receba lançamentos, promoções e novidades.

   Seu nome     Seu WhatsApp     Seu melhor e-mail   Inscrever-se 

## Cursos

- [ Base para Devs ](https://www.treinaweb.com.br/categoria/base-para-devs)
- [ Front-end ](https://www.treinaweb.com.br/categoria/desenvolvimento-front-end)
- [ Back-end ](https://www.treinaweb.com.br/categoria/desenvolvimento-back-end)
- [ Mobile ](https://www.treinaweb.com.br/categoria/desenvolvimento-mobile)
- [ Bancos de Dados ](https://www.treinaweb.com.br/categoria/bancos-de-dados)
- [ Cloud ](https://www.treinaweb.com.br/categoria/cloud-computing)
- [ IA ](https://www.treinaweb.com.br/categoria/ia)
- [ E mais ](https://www.treinaweb.com.br/categoria/e-mais)
- [ Ver todos os cursos ](https://www.treinaweb.com.br/cursos)

## Conteúdo

- [ Formações ](https://www.treinaweb.com.br/formacoes)
- [ Projetos práticos ](https://www.treinaweb.com.br/projetos-praticos)
- [ Direto ao ponto ](https://www.treinaweb.com.br/direto-ao-ponto)
- [ Planos ](https://www.treinaweb.com.br#assinatura)
- [ Depoimentos ](https://www.treinaweb.com.br#depoimentos)
- [ Comunidade ](https://www.treinaweb.com.br#comunidade)
- [ Corpo docente ](https://www.treinaweb.com.br#docente)

## A empresa

- [ Sobre a TreinaWeb ](https://www.treinaweb.com.br#sobre)
- [ Perguntas frequentes ](https://www.treinaweb.com.br#faq)
- [ Vantagens de estudar na TreinaWeb ](https://www.treinaweb.com.br/vantagens-de-estudar-na-treinaweb)
- [ Cursos para empresas ](https://www.treinaweb.com.br/empresas)
- [ Sugira um novo curso ](https://www.treinaweb.com.br/sugerir-curso)
- [ Trabalhe conosco ](https://www.treinaweb.com.br/trabalhe-conosco)
- [ Artigos ](https://www.treinaweb.com.br/blog)
- [ Desenvolvedores e agentes ](https://www.treinaweb.com.br/developers)
- [ Contato ](https://www.treinaweb.com.br/contato)
- [ Política de privacidade ](https://www.treinaweb.com.br/politica-de-privacidade)
- [ Termos de uso ](https://www.treinaweb.com.br/termos-de-uso)

## Baixe nosso aplicativo

 [   Disponível na **App Store**  ](https://apps.apple.com/us/app/treinaweb/id1322729447) [   Disponível no **Google Play**  ](https://play.google.com/store/apps/details?id=br.com.treinaweb.mobile) 

  Av. Paulista, 1765, Conj 71 e 72 · Bela Vista · São Paulo · SP · 01311-200   © 2004 – 2026 TreinaWeb Tecnologia LTDA · CNPJ 06.156.637/0001-58
