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);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
Comparações estritas reduzem ambiguidades; validação de entradas continua a ser uma responsabilidade explícita.
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