Desafio PHP
Heredoc e formatação de relatório
Enunciado
Crie um script que gere um relatório formatado usando heredoc. O relatório deve conter:
- Um título:
Relatório de Vendas - Uma linha em branco
- Uma lista com três produtos e seus preços:
Produto A: R$ 10.50Produto B: R$ 20.75Produto C: R$ 5.30
- Uma linha em branco
- O total formatado com duas casas decimais:
Total: R$ 36.55
Além disso, exiba o comprimento total do relatório (incluindo quebras de linha) usando strlen(). Use variáveis para os preços e calcule o total.
Requisitos
- Usar heredoc para montar o relatório multilinha.
- Calcular o total dos três preços.
- Formatar o total com
number_format()para duas casas decimais. - Exibir o comprimento do relatório com
strlen().
Código inicial
<?php
// Defina os preços e monte o relatório com heredoc
Saída esperada
Relatório de Vendas
Produto A: R$ 10.50
Produto B: R$ 20.75
Produto C: R$ 5.30
Total: R$ 36.55
Comprimento do relatório: 98
Ver dica
Use <<<RELATORIO para iniciar o heredoc e RELATORIO; para encerrar. Dentro do heredoc, você pode interpolar variáveis e usar \n implicitamente pelas quebras de linha. Para o total, some os preços e use number_format($total, 2, ',', '.').
Mostrar solução
<?php
// Preços dos produtos
$precoA = 10.50;
$precoB = 20.75;
$precoC = 5.30;
// Cálculo do total
$total = $precoA + $precoB + $precoC;
$totalFormatado = number_format($total, 2, ',', '.');
// Montagem do relatório com heredoc
$relatorio = <<<RELATORIO
Relatório de Vendas
Produto A: R$ $precoA
Produto B: R$ $precoB
Produto C: R$ $precoC
Total: R$ $totalFormatado
RELATORIO;
// Exibição do relatório
echo $relatorio;
// Comprimento do relatório
echo "Comprimento do relatório: " . strlen($relatorio) . "\n";
Passo a passo
- Definimos as variáveis
$precoA,$precoBe$precoCcom os valores dos produtos. - Calculamos o total somando os três preços.
- Usamos
number_format($total, 2, ',', '.')para formatar o total com duas casas decimais, vírgula como separador decimal e ponto como separador de milhar. - Iniciamos o heredoc com
<<<RELATORIOe escrevemos o texto multilinha. As variáveis são interpoladas automaticamente. - Encerramos o heredoc com
RELATORIO;na coluna zero (sem indentação). - Exibimos o relatório com
echoe, em seguida, mostramos o comprimento usandostrlen().
Por que funciona
O heredoc permite criar strings multilinha sem precisar escapar aspas ou usar concatenação. Variáveis são interpoladas como em aspas duplas. O number_format() garante a formatação correta do valor monetário. O strlen() conta todos os caracteres, incluindo quebras de linha.
Erros comuns
- Indentar o fechamento do heredoc: em versões anteriores ao PHP 7.3, o identificador de fechamento deve estar na coluna zero. A partir do PHP 7.3, é permitido indentar, mas a indentação é removida do conteúdo. Para evitar problemas, coloque na coluna zero.
- Esquecer de escapar variáveis que não devem ser interpoladas: use
\$ou mude para nowdoc (<<<'RELATORIO'). - Usar
strlen()no lugar demb_strlen()para strings com acentos:strlen()conta bytes, não caracteres. Para textos com acentos, usemb_strlen().
Outra forma de resolver
Usar printf() para formatar cada linha:
printf("Produto A: R$ %.2f\n", $precoA);
É útil quando você precisa de formatação numérica específica, mas perde a conveniência do heredoc para textos longos.
Saída esperada
Relatório de Vendas
Produto A: R$ 10.50
Produto B: R$ 20.75
Produto C: R$ 5.30
Total: R$ 36.55
Comprimento do relatório: 98