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 int e retorno int.
  • 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

  1. declare(strict_types=1); ativa a verificação estrita de tipos para este arquivo.
  2. A função dobro declara que recebe um int e devolve um int.
  3. Dentro dela, multiplicamos o parâmetro por 2 e retornamos o resultado.
  4. Chamamos dobro(5) com um inteiro literal, o que é compatível com o tipo esperado.
  5. echo imprime 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 int mas retornar uma string, como return "10";: com strict_types, isso gera TypeError.
  • Chamar a função com uma string numérica, como dobro("5"): com strict_types, gera TypeError; 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