Fácil PHP
Função de saudação com parâmetro padrão
Enunciado
Crie uma função saudacao que recebe um nome e um período do dia (com valor padrão "dia"). A função deve retornar uma string no formato "Bom dia, [nome]!" ou "Boa tarde, [nome]!" ou "Boa noite, [nome]!" conforme o período. Use match para escolher a saudação.
Requisitos
- A função deve se chamar
saudacaoe ter dois parâmetros:$nome(string) e$periodo(string, padrão'dia'). - Deve retornar a string formatada corretamente para os períodos
'dia','tarde'e'noite'. - Se o período não for reconhecido, deve lançar uma exceção
InvalidArgumentException.
Código inicial
<?php
// Complete a função saudacao
function saudacao(string $nome, string $periodo = 'dia'): string {
// seu código aqui
}
// Testes
echo saudacao('Ana') . PHP_EOL;
echo saudacao('Carlos', 'tarde') . PHP_EOL;
echo saudacao('Bia', 'noite') . PHP_EOL;
Saída esperada
Bom dia, Ana!
Boa tarde, Carlos!
Boa noite, Bia!
Ver dica
Use match para mapear o período para a saudação. Lembre-se de tratar o caso padrão com default e lançar a exceção.
Mostrar solução
<?php
declare(strict_types=1);
function saudacao(string $nome, string $periodo = 'dia'): string {
$saudacao = match ($periodo) {
'dia' => 'Bom dia',
'tarde' => 'Boa tarde',
'noite' => 'Boa noite',
default => throw new InvalidArgumentException("Período inválido: $periodo"),
};
return "$saudacao, $nome!";
}
echo saudacao('Ana') . PHP_EOL;
echo saudacao('Carlos', 'tarde') . PHP_EOL;
echo saudacao('Bia', 'noite') . PHP_EOL;
Passo a passo
- Declaramos a função
saudacaocom dois parâmetros:$nome(obrigatório) e$periodo(opcional, padrão'dia'). - Usamos
matchpara comparar$periodoe retornar a saudação correspondente. - No caso
default, lançamos uma exceçãoInvalidArgumentExceptionpara períodos não reconhecidos. - A variável
$saudacaorecebe a string da saudação (ex.:'Bom dia'). - Retornamos a concatenação de
$saudacao, vírgula, espaço,$nomee exclamação. - Chamamos a função três vezes: sem o segundo argumento (usa padrão), com
'tarde'e com'noite'. - Exibimos os resultados com
echoe quebra de linhaPHP_EOL.
Por que funciona
A função encapsula a lógica de saudação, usando o valor padrão para simplificar chamadas comuns. O match é uma expressão que retorna um valor e permite lançar exceções no default, garantindo que apenas períodos válidos sejam aceitos. O tipo de retorno string assegura que a função sempre devolve texto.
Erros comuns
- Esquecer o
defaultnomatch: isso gera umUnhandledMatchErrorse o período for inválido. Solução: incluirdefault => throw new InvalidArgumentException(...). - Não declarar o tipo de retorno
: string: o código funciona, mas perde a verificação de tipos. Solução: adicionar: stringapós os parênteses. - Usar
ifem vez dematche esquecer de retornar em algum caso: a função pode retornarnullimplicitamente. Solução: usarmatchou garantirreturnem todos os caminhos.
Outra forma de resolver
Usar switch:
switch ($periodo) {
case 'dia': $saudacao = 'Bom dia'; break;
case 'tarde': $saudacao = 'Boa tarde'; break;
case 'noite': $saudacao = 'Boa noite'; break;
default: throw new InvalidArgumentException("Período inválido: $periodo");
}
return "$saudacao, $nome!";
Prefira match por ser mais conciso e seguro.
Saída esperada
Bom dia, Ana!
Boa tarde, Carlos!
Boa noite, Bia!