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.50
    • Produto B: R$ 20.75
    • Produto 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

  1. Definimos as variáveis $precoA, $precoB e $precoC com os valores dos produtos.
  2. Calculamos o total somando os três preços.
  3. Usamos number_format($total, 2, ',', '.') para formatar o total com duas casas decimais, vírgula como separador decimal e ponto como separador de milhar.
  4. Iniciamos o heredoc com <<<RELATORIO e escrevemos o texto multilinha. As variáveis são interpoladas automaticamente.
  5. Encerramos o heredoc com RELATORIO; na coluna zero (sem indentação).
  6. Exibimos o relatório com echo e, em seguida, mostramos o comprimento usando strlen().

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 de mb_strlen() para strings com acentos: strlen() conta bytes, não caracteres. Para textos com acentos, use mb_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