← PHP para aplicações reais
01 / 11 · 23 MIN

Tipos e comparações explícitas

Evita decisões inesperadas ao comparar dados externos.

Comparações previsíveis

O operador === exige igualdade de valor e de tipo. O operador == pode fazer conversões de tipos. Ao processar um formulário, lembra-te de que muitos valores chegam como texto e precisam de validação antes de serem usados como identificadores ou quantidades.

Contratos de funções

As declarações de tipos tornam os contratos mais claros. declare(strict_types=1) afeta a coerção de tipos escalares nas chamadas feitas pelo ficheiro; não valida automaticamente formulários. Define regras de formato, intervalo e obrigatoriedade junto da entrada.

Aplicação guiada no trabalho

Num formulário de um serviço fictício, a quantidade pode ser zero e tem de ficar entre 0 e 100. A string "0" é considerada vazia por empty, pelo que esse teste não representa a regra de obrigatoriedade. Distingue campo ausente, formato inválido e valor fora do intervalo. Se FILTER_VALIDATE_INT devolver 0, compara a falha com === false para não rejeitar zero válido; o comportamento depende das flags usadas. strict_types ajuda a controlar coerção de argumentos escalares nas chamadas, mas não verifica intervalos nem autorização. Para chamadas diretas entre ficheiros, o modo do chamador é relevante. Mantém esse detalhe separado das regras do formulário e das regras de valores devolvidos. Define exemplos de fronteira antes de ligar a validação à operação de produção.

<?php
declare(strict_types=1);
function total(int $count, int $price): int {
    return $count * $price;
}
echo total(3, 20);
NA PRÁTICA

Um campo de quantidade contém "0". Não uses uma verificação genérica que confunda zero com ausência se zero for permitido pelo negócio.

Armadilhas comuns

Rejeitar zero com empty; usar == para detetar false de validação; confundir strict_types com regras de negócio.

Tópicos relacionados: Arrays e funções com intenção · Dados com parâmetros

Leva esta ideia contigo

Comparações estritas reduzem ambiguidades; validação de entradas continua a ser uma responsabilidade explícita.

Criar conta

Referência: PHP manual: Type declarations · PHP 8.5 reference; DR PHP 2026.3; new fixtures executed on PHP 8.4.4 / SQLite 3.51.2