Da trilha de PHP Este conceito ainda não saiu como card do dia. ir para o card de hoje

PHP Tipos Básico

Tipagem e strict_types

Em PHP, a tipagem é opcional por padrão: os tipos declarados em parâmetros e retornos são coercivos, ou seja, o PHP tenta converter valores automaticamente. Isso pode gerar surpresas, como uma função que espera int aceitar a string "10" sem reclamar.

Com declare(strict_types=1); no topo do arquivo, o PHP passa a exigir que os tipos batam exatamente. Assim, passar "10" para um parâmetro int gera um TypeError. Essa diretiva vale para todo o arquivo e deve ser a primeira instrução, antes de qualquer outro código.

Além dos tipos simples (int, float, string, bool, array, object, iterable, callable), o PHP moderno suporta union types (ex.: int|string) e nullable (ex.: ?string ou string|null). Com strict_types=1, esses tipos são verificados de forma estrita, tornando o código mais previsível e seguro.

Neste card, você vai praticar a declaração de tipos em funções e métodos, usar union types e nullable, e entender como strict_types altera o comportamento do programa.

Pontos-chave

  • declare(strict_types=1); deve ser a primeira instrução do arquivo e afeta apenas aquele arquivo.
  • Com strict_types, os tipos declarados em parâmetros e retornos são verificados sem conversão automática.
  • Union types permitem aceitar mais de um tipo, como int|string.
  • Nullable pode ser escrito como ?tipo ou tipo|null e aceita null além do tipo indicado.
  • Sem strict_types, o PHP tenta converter valores, o que pode mascarar erros.
tipagem_estrita.php
<?php

declare(strict_types=1);

// Função com tipos de parâmetro e retorno
function somar(int $a, int $b): int {
    return $a + $b;
}

// Union type: aceita int ou float
function formatarNumero(int|float $n): string {
    return number_format($n, 2, ',', '.');
}

// Nullable: aceita string ou null
function saudacao(?string $nome): string {
    return $nome === null ? "Olá, visitante!" : "Olá, $nome!";
}

echo somar(2, 3), PHP_EOL;               // 5
echo formatarNumero(1234.5), PHP_EOL;    // 1.234,50
echo formatarNumero(42), PHP_EOL;        // 42,00
echo saudacao("Ana"), PHP_EOL;            // Olá, Ana!
echo saudacao(null), PHP_EOL;             // Olá, visitante!

// Descomente para ver o TypeError:
// echo somar("2", 3);

Exercícios

  1. 1
    Fácil

    Função com tipagem estrita

    Crie uma função dobro que recebe um número inteiro e retorna o dobro. Use declare(strict_types=1); e tipos explícitos no parâmetro e no retorno. Chame a função com 5 e imprima o resultado.

    Resolver
  2. 2
    Médio

    Union type e nullable

    Crie uma função descrever que recebe um parâmetro int|string|null e retorna uma string. Se o valor for null, retorne "vazio". Se for int, retorne "número: X". Se for string, retorne "texto: Y". Use declare(strict_types=1); e tipos explícitos. Chame a função com 10, "PHP" e null, imprimindo cada resultado em uma linha.

    Resolver
  3. 3
    Desafio

    Calculadora com tipagem estrita e union types

    Crie uma calculadora que aceita dois números (int ou float) e uma operação (string). A função calcular deve ter parâmetros tipados como int|float e string, e retorno int|float. Ela deve suportar as operações soma, subtracao, multiplicacao e divisao. Se a operação for desconhecida, lance InvalidArgumentException. Se houver divisão por zero, lance DivisionByZeroError. Use declare(strict_types=1);. Teste com as quatro operações e imprima cada resultado. Trate as exceções com try/catch para exibir mensagens amigáveis.

    Resolver

Continue estudando