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
?tipooutipo|nulle aceitanullalém do tipo indicado. - Sem strict_types, o PHP tenta converter valores, o que pode mascarar erros.
<?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);