União de Tipos no PHP 8: o que é e como usar \| TreinaWeb               Promoção no ar   Matricule-se agora e garanta **54% de desconto**  

  Termina em   Tempo restante da oferta: 15 Horas 

 33 Min 

 23 Seg 

   Tempo restante da oferta: 15 33 23 

  [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) União de Tipos no PHP 8: o que é e como usar  [ PHP ](https://www.treinaweb.com.br/blog/categoria/php) 

# União de Tipos no PHP 8: o que é e como usar

 Aprenda o que é e como utilizar união de tipos no PHP. Recurso conhecido como union types que permite ao desenvolvedor flexibilidade ao trabalhar com tipos.

 [ Elton Fonseca ](https://www.treinaweb.com.br/blog/autor/elton-fonseca) 6 anos atrás

  ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2020/11/uniao-de-tipos-no-php-8-o-que-e-e-como-usar.png)  

Nesse artigo vamos falar sobre união de tipos no PHP, ou também conhecido como union types. Recurso adicionado a linguagem na versão 8 e possui a finalidade de melhorar o uso de tipos.

A comunidade vem trabalhando para melhorar a questão de [tipos na linguagem PHP](https://www.treinaweb.com.br/blog/tipos-no-php/ "tipos na linguagem PHP") há algum tempo. A versão 7.0 trouxe vários detalhes importantes, como uso de tipos primitivos em parâmetros e retornos, tipagem estrita e melhorou o tratamento de erros para tipos. A versão 7.1 trouxe a opção de definir um parâmetro como anulável e também o retorno void. A 7.4 permitiu a definição de tipos em propriedades e a 8 trouxe como principal novidade a união de tipos.

## O que é união de tipos no PHP

Quando trabalhamos com tipo e principalmente quando trabalhamos tipagem estrita, os dados que enviamos para um parâmetro ou que retornamos precisam ser exatamente do tipo declarado e isso pode tornar as coisas um pouco inflexíveis.

A união de tipos permite que você declare mais de um tipo para um parâmetro ou retorno. Veja o exemplo:

```php
function andar(int|string $velocidadeMaxima): string|float {
    return $aceleracao . ' ' . $velocidadeMaxima;
}

```

No exemplo acima, a função andar pode receber a velocidade máxima como sendo um inteiro ou uma string e pode retornar uma string ou um float.

## Sintaxe de uso do Union Type

A Sintaxe para utilização da união de tipos no PHP é muito simples. Basta separar os tipos por pipes `|`, conforme o exemplo abaixo:

```php
function nomeFuncao(
    tipo1|tipo2|tipoN $nomeparametro1, 
    tipo1|tipo2|tipoN $nomeparametro2,
): tipo1|tipo2|tipoN {
    //código da função
}

```

Podemos usar dentro da união de tipos no php qualquer tipo válido na linguagem, com algumas exceções que vamos ver abaixo.

## Permitindo null na união de tipos

Usando definição de um único tipo no PHP podemos tornar um parâmetro ou retorno anulável usando sinal de interrogação, conforme o exemplo abaixo:

```php
function somar(?int $num1, ?int $num2): ?int
{
    if ($num1 === null || $num2 == null) {
        return null;
    }

    return $num1 + $num2;
}

```

Já com uso de union type precisamos usar a palavra null:

```php
function somar(int|float|null $num1, int|float|null $num2): int|float|null
{
    if ($num1 === null || $num2 == null) {
        return null;
    }

    return $num1 + $num2;
}

```

## Void na união de tipos

Quando uma função ou método não possui retorno, nós podemos declarar o retorno como void:

```php
function mostrar(string $valor): void
{
    echo $valor;
}

```

Porém uso de `void` não é permitido para a união de tipos.

```php
function mostrar(string $valor): void|string
{
    echo $valor;
}

```

Se tentar usar ele apresentará o seguinte erro:

```
Fatal error: Void can only be used as a standalone type in xxx on line N

```

## Mixed na união de tipos

Na versão 8.0 o PHP ganhou a anotação de tipo mixed. Esse tipo já existe na documentação da linguagem, porém não existia como tipo realmente. Ele indica que um parâmetro ou retorno pode ser de qualquer tipo válido na linguagem. Veja o exemplo:

```php
function mostrar(mixed $valor): void
{
    echo $valor;
}

```

O parâmetro `$valor` pode ser de qualquer tipo válido, consequentemente não faz sentido usar ele junto com outros tipos no union type:

```php
function mostrar(string|mixed $valor): void
{
    echo $valor;
}

```

O código acima apresentará o seguinte erro:

```
Fatal error: Type mixed can only be used as a standalone type in xxx on line N

```

## Indicador false

Ao usar união de tipos no PHP (union Type), podemos usar a palavra reservada false para indicar que uma função retornará um determinado tipo ou false, veja o exemplo abaixo:

```php
class Carro {
    protected int $velocidadeAtual = 0; 

    public function estaAndando(): int|false
    {
        if ($this->velocidadeAtual > 0) {
            return $this->velocidadeAtual;
        }

        return false;
    }
}

```

A palavra false não pode ser usado junto com o tipo bool e também vale ressaltar que a palavra true não pode ser usada.

## Considerações Finais

O recurso de união de tipos no PHP é algo extremamente interessante, principalmente para ajudar na migração gradual de aplicações que não utilizam tipos estritos para utilização de tipos estritos. Ela também garante um nível de leitura maior para aplicações que não adotaram o uso de tipo estrito, uma vez que é possível usar union type para declarar os tipos válidos de entrada e saída sem estar preso a tipagem estrita.

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

Autor

 ![Elton Fonseca](//secure.gravatar.com/avatar/2cee05645357ced0841ce76ba5569c72?d=mm)

## Elton Fonseca

 Professor e desenvolvedor. Formado em análise e desenvolvimento de sistema, pós graduado em engenharia e arquitetura de software. É autor de cursos em diversos temas, como, desenvolvimento back-end, cloud computing e CMSs. Nas horas vagas adora estudar sobre o mercado financeiro, cozinhar e brincar com pequeno Daniel. [@eltonfonsecadev](https://twitter.com/eltonfonsecadev) 

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

## 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/2023/07/DICA-CODIGO-PHP-400x280.jpg)  [ PHP ](https://www.treinaweb.com.br/blog/categoria/php) 

     3 anos atrás

    ##  [ Dica de Código: Propriedades Somente Leitura no PHP ](https://www.treinaweb.com.br/blog/dica-de-codigo-propriedades-somente-leitura-no-php) 

     Descubra como utilizar as propriedades somente leitura no PHP 8.1 para criar código mais seguro e confiável.

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

     8 anos atrás

    ##  [ Introdução à programação assíncrona em PHP usando o ReactPHP ](https://www.treinaweb.com.br/blog/introducao-a-programacao-assincrona-em-php-usando-o-reactphp) 

     Uma introdução à programação assíncrona com PHP e uso básico dos componentes do ReactPHP.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2020/03/05155042/iterators-php-400x280.png)  [ PHP ](https://www.treinaweb.com.br/blog/categoria/php) 

     7 anos atrás

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

     Iterator é um mecanismo que permite que um objeto seja iterado e ele próprio fica no controle granular dessa iteração.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2017/06/middlewares-adicionais-para-o-zend-expressive-2-400x280.png)  [ PHP ](https://www.treinaweb.com.br/blog/categoria/php) 

     10 anos atrás

    ##  [ Middlewares adicionais para o Zend Expressive 2 ](https://www.treinaweb.com.br/blog/middlewares-adicionais-para-o-zend-expressive-2) 

     Veremos neste artigo como adicionar uma camada de retorno usando middleware, com o objetivo de flexibilizar futuros retornos no Zend Expressive.

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

     10 anos atrás

    ##  [ Full Text Search com Laravel, Scout e Algolia ](https://www.treinaweb.com.br/blog/full-text-search-com-laravel-scout-e-algolia) 

     Aprenda como realizar buscas textuais rápidas e eficientes independentemente da quantidade de registros, campos ou tamanhos de textos.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2018/06/28145950/security-csrf-400x280.jpg)  [ Segurança da Informação ](https://www.treinaweb.com.br/blog/categoria/seguranca-da-informacao) 

     9 anos atrás

    ##  [ Cross-Site Request Forgery (CSRF) e abordagens para mitigá-lo ](https://www.treinaweb.com.br/blog/cross-site-request-forgery-csrf-e-abordagens-para-mitiga-lo) 

     Entenda o que é Cross-Site Request Forgery (CSRF) e conheça abordagens para mitigá-lo, incluindo a mais moderna delas, que é o atributo SameSite para cookies.

     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/2023/07/DICA-CODIGO-PHP-400x280.jpg)  [ PHP ](https://www.treinaweb.com.br/blog/categoria/php) 

     3 anos atrás

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

     Descubra como os enums no PHP podem transformar seu código, tornando-o mais claro e eficiente. Otimize seu código agora!

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

     8 anos atrás

    ##  [ O que são Traits no PHP e quando usar? ](https://www.treinaweb.com.br/blog/quando-usar-traits-no-php) 

     Uma reflexão sobre reuso de código, herança e a recomendação de utilização de Traits.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2019/09/09160454/SGBDs-400x280.png)  [ Bancos de Dados ](https://www.treinaweb.com.br/blog/categoria/bancos-de-dados) 

     5 anos atrás

    ##  [ Tipos de banco de dados NoSQL ](https://www.treinaweb.com.br/blog/tipos-de-banco-de-dados-nosql) 

     Veja neste artigo os principais tipos de banco de dados NoSQL.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2021/05/linguagens-paradigmas-400x280.jpg)  [ Desenvolvimento ](https://www.treinaweb.com.br/blog/categoria/desenvolvimento) 

     10 anos atrás

    ##  [ Linguagens e paradigmas de programação ](https://www.treinaweb.com.br/blog/linguagens-e-paradigmas-de-programacao) 

     Saiba um pouco mais sobre as linguagens de programação e seus principais paradigmas.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2019/01/22182140/TEMPLATES-GRATUITOS-400x280.png)  [ Desenvolvimento Front-end ](https://www.treinaweb.com.br/blog/categoria/desenvolvimento-front-end) 

     8 anos atrás

    ##  [ Templates gratuitos para aplicações administrativas ](https://www.treinaweb.com.br/blog/templates-gratuitos-para-aplicacoes-administrativas) 

     Neste artigo veremos alguns templates para criação de aplicações administrativas.

     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  **15h 33min 23s**

- 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
