Fácil PHP
Função com tipagem estrita
Enunciado
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.
Requisitos
- O arquivo deve começar com
declare(strict_types=1);. - A função deve ter parâmetro tipado como
inte retornoint. - A saída deve ser exatamente
10.
Código inicial
<?php
// Seu código aqui
Saída esperada
10
Ver dica
Lembre-se de que declare(strict_types=1); precisa ser a primeira instrução do arquivo, antes de qualquer echo ou função.
Mostrar solução
<?php
declare(strict_types=1);
function dobro(int $n): int {
return $n * 2;
}
echo dobro(5), PHP_EOL;
Passo a passo
declare(strict_types=1);ativa a verificação estrita de tipos para este arquivo.- A função
dobrodeclara que recebe uminte devolve umint. - Dentro dela, multiplicamos o parâmetro por 2 e retornamos o resultado.
- Chamamos
dobro(5)com um inteiro literal, o que é compatível com o tipo esperado. echoimprime o valor retornado, seguido de uma quebra de linha.
Por que funciona
Com strict_types=1, o PHP não converte automaticamente valores. Passar 5 (int) para um parâmetro int é válido, e o retorno também é um int. Se tentássemos dobro("5"), o PHP lançaria um TypeError, pois a string não é convertida para inteiro. Isso torna o contrato da função explícito e evita bugs silenciosos.
Erros comuns
- Esquecer o
declare(strict_types=1);ou colocá-lo depois de outra instrução: o PHP emite um erro de compilação (strict_types declaration must be the very first statement). - Declarar o retorno como
intmas retornar uma string, comoreturn "10";: com strict_types, isso geraTypeError. - Chamar a função com uma string numérica, como
dobro("5"): com strict_types, geraTypeError; sem strict_types, funcionaria por conversão.
Outra forma de resolver
Se quiser aceitar também strings numéricas, use um union type e converta manualmente:
function dobro(int|string $n): int {
return (int)$n * 2;
}
Prefira a versão estrita quando quiser garantir que apenas inteiros sejam passados.
Saída esperada
10