Sua dose diária de programação

Conceito, 3 exemplos e 3 exercícios: uma pequena conquista de cada vez.

✦   Lição

Seu primeiro programa

Um programa PHP é um arquivo de texto com extensão .php que começa com a tag <?php. Tudo o que vem depois dela é código, e o interpretador executa as instruções de cima para baixo. Para rodar no terminal, basta php arquivo.php; não há etapa de compilação.

PHP Fundamentos Iniciante 3 exemplos + 3 exercícios
42 lições publicadas 10 linguagens novas lições todo dia útil
PHP / Fundamentos

Seu primeiro programa

por Ellery Blackwood
Iniciante

Entenda o conceito

Um programa PHP é um arquivo de texto com extensão .php que começa com a tag <?php. Tudo o que vem depois dela é código, e o interpretador executa as instruções de cima para baixo. Para rodar no terminal, basta php arquivo.php; não há etapa de compilação.

A forma mais simples de mostrar algo na tela é o echo, que escreve um texto na saída padrão. Cada instrução termina com ponto e vírgula, e a quebra de linha não é automática: você a acrescenta com a constante PHP_EOL ou com \n dentro de aspas duplas. O ponto (.) junta textos, operação chamada concatenação.

Variáveis começam com $ e guardam valores que você reaproveita nas mensagens. Em aspas duplas, o PHP substitui $nome pelo valor da variável (interpolação); em aspas simples, o texto sai exatamente como foi escrito. Para textos com formato controlado, como números com casas decimais ou colunas alinhadas, use printf.

↳ Pontos-chave
  • Todo arquivo começa com <?php; em arquivos só com código PHP, a tag de fechamento ?> é omitida.
  • echo imprime texto e não pula linha sozinho: acrescente PHP_EOL ou \n entre aspas duplas.
  • O ponto (.) concatena textos, e cada instrução termina com ponto e vírgula.
  • Aspas duplas e heredoc interpolam variáveis ("Olá, $nome"); aspas simples mostram o texto literal.
  • printf formata a saída com marcadores como %s, %d e %.1f; sprintf devolve o texto em vez de imprimir.

Do conceito à prática

3 exemplos para ver a ideia funcionando.

01Olá, mundo com echo e print

ola.php
<?php

// Todo arquivo PHP começa com a tag de abertura <?php.
// Em arquivos só com código PHP, a tag de fechamento é omitida.

// echo escreve um texto na saída padrão.
echo "Olá, mundo!";

// PHP_EOL é a quebra de linha do sistema operacional.
echo PHP_EOL;

// Dá para juntar o texto e a quebra de linha com o ponto (concatenação).
echo "Bem-vindo à Loja do Bairro!" . PHP_EOL;

// print funciona de forma parecida com echo.
print "Hoje temos cupons de desconto." . PHP_EOL;

// echo aceita vários argumentos separados por vírgula.
echo "Volte sempre", "!", PHP_EOL;

O primeiro exemplo mostra a estrutura mínima de um programa: a tag <?php e instruções echo terminadas em ponto e vírgula. Repare que o primeiro echo não pula linha; quem faz isso é o echo PHP_EOL seguinte.

Depois aparecem três jeitos comuns de terminar a linha no mesmo comando: concatenar com o ponto, usar print (que recebe um único argumento) e passar vários argumentos ao echo, separados por vírgula.

02Variáveis e interpolação na biblioteca

boas-vindas.php
<?php

// Variáveis começam com $ e recebem valores com =.
$biblioteca = "Biblioteca Central";
$leitora = "Ana";
$livrosEmprestados = 3;

// Aspas simples: o texto sai exatamente como foi escrito.
echo 'Olá, $leitora!' . PHP_EOL;

// Aspas duplas: as variáveis dentro do texto são substituídas.
echo "Olá, $leitora!" . PHP_EOL;

// Chaves deixam claro onde o nome da variável termina.
echo "Você está na {$biblioteca}." . PHP_EOL;

// Números também entram no texto sem conversão manual.
echo "Livros emprestados: $livrosEmprestados" . PHP_EOL;

// Concatenação com o ponto produz o mesmo resultado.
echo "Leitora: " . $leitora . " | Livros: " . $livrosEmprestados . PHP_EOL;

Aqui as mensagens usam variáveis. A primeira linha, em aspas simples, imprime $leitora ao pé da letra; a segunda, em aspas duplas, troca o nome da variável pelo valor Ana. Essa diferença é uma das primeiras surpresas de quem começa em PHP.

As chaves em {$biblioteca} marcam onde termina o nome da variável, o que evita confusão quando o texto continua colado nela. A última linha mostra que a concatenação com o ponto chega ao mesmo resultado, e que o número 3 vira texto automaticamente.

03Cartão de receita com heredoc e printf

cartao-receita.php
<?php

declare(strict_types=1);

// Dados de uma receita guardados em variáveis.
$receita = "Bolo de cenoura";
$porcoes = 8;
$tempoMinutos = 45;
$farinhaGramas = 240.5;

// Heredoc: um bloco de várias linhas que aceita variáveis,
// como as aspas duplas. O texto termina no marcador TXT.
echo <<<TXT
=== Cartão de receita ===
Receita: {$receita}
Porções: {$porcoes}
TXT;
echo PHP_EOL;

// printf formata valores: %d para inteiro, %.1f para decimal
// com uma casa e %s para texto. \n é a quebra de linha.
printf("Tempo de forno: %d minutos\n", $tempoMinutos);
printf("Farinha: %.1f g\n", $farinhaGramas);

// sprintf monta o texto formatado sem imprimir.
$rodape = sprintf("Rende %d fatias de %s.", $porcoes, strtolower($receita));
echo $rodape . PHP_EOL;

O heredoc (<<<TXT ... TXT;) imprime várias linhas de uma vez e interpola variáveis como as aspas duplas. A última linha do bloco não leva quebra de linha, por isso o programa imprime PHP_EOL logo depois.

Com printf, o formato fica separado dos valores: %d recebe um inteiro e %.1f mostra o decimal com uma casa. O sprintf faz o mesmo trabalho, mas devolve o texto para uma variável, útil quando a mensagem ainda vai ser combinada com outra coisa. O declare(strict_types=1) no topo é um bom hábito em PHP moderno.


Agora é com você

Tente resolver no rascunho antes de abrir a resposta. Os códigos não são executados nesta página.

01Placa do mercadinhoFácil

Escreva um programa que imprima a placa de entrada de um mercadinho em três linhas: o nome da loja, o horário de funcionamento e um slogan.

↳ Requisitos
  • Usar echo para cada uma das três linhas.
  • Terminar cada linha com PHP_EOL.
  • Imprimir exatamente os textos da saída esperada, com acentos.
código inicial
<?php

// Imprima o nome da loja, o horário e o slogan, um por linha.
saída esperada
Mercadinho Boa Compra
Aberto de segunda a sábado, das 8h às 20h
Preço justo todo dia!
Ver dica

O echo não pula linha sozinho: junte o texto e PHP_EOL com o operador de concatenação.

Ver resposta
<?php

// Cada echo imprime uma linha e termina com PHP_EOL.
echo "Mercadinho Boa Compra" . PHP_EOL;
echo "Aberto de segunda a sábado, das 8h às 20h" . PHP_EOL;
echo "Preço justo todo dia!" . PHP_EOL;

Passo a passo

  1. A tag <?php abre o código; como o arquivo só tem PHP, não há ?> no fim.
  2. O primeiro echo imprime o nome da loja, Mercadinho Boa Compra.
  3. O ponto (.) concatena o texto com PHP_EOL, a quebra de linha do sistema.
  4. O segundo echo imprime o horário; os acentos saem normalmente porque o arquivo está em UTF-8.
  5. O terceiro echo imprime o slogan e também termina com PHP_EOL, para que a saída feche com uma quebra de linha.

Por que funciona

O PHP executa as instruções na ordem em que aparecem, então as três linhas saem na sequência do código. Como o echo escreve só o que recebe, cada linha precisa da sua própria quebra; sem ela, os textos ficariam grudados.

Usar PHP_EOL em vez de digitar \n deixa claro que o objetivo é terminar a linha e funciona igual em aspas simples ou duplas, porque é uma constante e não um caractere dentro do texto.

Erros comuns

  • Esquecer a quebra: echo "Mercadinho Boa Compra"; faz a próxima linha começar colada nesta. Acrescente . PHP_EOL.
  • Usar \n em aspas simples: echo 'Preço justo todo dia!\n'; imprime a barra e a letra n literalmente. Use aspas duplas ou PHP_EOL.
  • Esquecer o ponto e vírgula: echo "Preço justo todo dia!" . PHP_EOL sem ; antes de outra instrução gera Parse error: syntax error. Termine toda instrução com ;.

Outra forma de resolver

Um único echo com heredoc imprime as três linhas de uma vez (lembrando de um PHP_EOL no fim). Essa forma é preferível quando o texto é longo e fixo, como um aviso ou um menu, porque o código fica parecido com o que aparece na tela.

Saída esperada

Mercadinho Boa Compra
Aberto de segunda a sábado, das 8h às 20h
Preço justo todo dia!

02Ficha de empréstimoMédio

Guarde em variáveis o nome do leitor, o título do livro e o prazo em dias de um empréstimo, e imprima uma ficha com esses dados usando interpolação.

↳ Requisitos
  • Criar as variáveis $leitor, $livro e $dias, com $dias como número inteiro.
  • Montar as linhas com interpolação em aspas duplas, sem concatenar as variáveis com o ponto.
  • Imprimir o título Ficha de empréstimo e uma linha para cada dado, na ordem da saída esperada.
código inicial
<?php

$leitor = "Bruno";
$livro = "Dom Casmurro";
$dias = 14;

// Imprima a ficha usando interpolação em aspas duplas.
saída esperada
Ficha de empréstimo
Leitor: Bruno
Livro: Dom Casmurro
Prazo: 14 dias
Ver dica

Dentro de aspas duplas, {$variavel} é trocado pelo valor; em aspas simples, não.

Ver resposta
<?php

// Dados do empréstimo guardados em variáveis.
$leitor = "Bruno";
$livro = "Dom Casmurro";
$dias = 14;

// Aspas duplas para que as variáveis sejam substituídas.
echo "Ficha de empréstimo" . PHP_EOL;
echo "Leitor: {$leitor}" . PHP_EOL;
echo "Livro: {$livro}" . PHP_EOL;
echo "Prazo: {$dias} dias" . PHP_EOL;

Passo a passo

  1. As três variáveis guardam os dados do empréstimo; $dias recebe 14 sem aspas, porque é um número.
  2. O título é um texto fixo, então basta um echo com PHP_EOL.
  3. Em "Leitor: {$leitor}", as aspas duplas fazem o PHP trocar {$leitor} por Bruno.
  4. As chaves marcam o fim do nome da variável; aqui são opcionais, mas evitam erros quando o texto continua colado.
  5. A linha do prazo interpola um inteiro; o PHP o converte em texto sem nenhuma função extra.
  6. Cada linha termina com . PHP_EOL: o ponto aqui junta a linha pronta à quebra, e não as variáveis.

Por que funciona

A interpolação acontece em tempo de execução: ao encontrar $ dentro de aspas duplas, o PHP lê o nome da variável e coloca o valor atual dela no lugar. Assim, se os dados mudarem, a ficha muda junto, sem tocar nas linhas de echo.

Essa é a vantagem de separar dados (as variáveis) de apresentação (as mensagens): o mesmo código serve para qualquer leitor e qualquer livro.

Erros comuns

  • Usar aspas simples: echo 'Leitor: {$leitor}'; imprime Leitor: {$leitor} literalmente. Troque por aspas duplas.
  • Errar o nome da variável: echo "Livro: {$livros}"; gera Warning: Undefined variable $livros e imprime Livro: vazio. Confira se o nome é idêntico, inclusive maiúsculas.
  • Colocar o número entre aspas: $dias = "14"; funciona na tela, mas guarda texto em vez de inteiro, o que atrapalha cálculos futuros como somar dias de renovação.

Outra forma de resolver

A concatenação ("Leitor: " . $leitor . PHP_EOL) chega à mesma saída e é comum em código antigo. Ela é preferível quando o valor vem de uma expressão, como uma chamada de função, que não pode ser escrita diretamente dentro das aspas.

Saída esperada

Ficha de empréstimo
Leitor: Bruno
Livro: Dom Casmurro
Prazo: 14 dias

03Placar alinhadoDesafio

Imprima o placar final de um jogo com três jogadores: um cabeçalho de duas linhas feito com heredoc e, abaixo, uma linha por jogador e uma linha de total, com os nomes alinhados à esquerda e os pontos alinhados à direita.

↳ Requisitos
  • Escrever o cabeçalho PLACAR FINAL e a linha de traços em um único heredoc.
  • Usar printf com o formato %-6s%5d em cada linha de jogador e na linha de total.
  • Calcular o total somando as variáveis de pontos, sem escrever o número 2237 no código.
  • Reproduzir exatamente os espaços da saída esperada.
código inicial
<?php

declare(strict_types=1);

$jogador1 = "Lia";
$pontos1 = 1200;
$jogador2 = "Caio";
$pontos2 = 950;
$jogador3 = "Duda";
$pontos3 = 87;

// 1. Imprima o cabeçalho com heredoc.
// 2. Imprima cada jogador com printf.
// 3. Calcule e imprima o total.
saída esperada
PLACAR FINAL
------------
Lia    1200
Caio    950
Duda     87
Total  2237
Ver dica

Em printf, o número entre % e a letra define a largura da coluna; o sinal de menos alinha à esquerda.

Ver resposta
<?php

declare(strict_types=1);

// Nomes e pontos dos três jogadores.
$jogador1 = "Lia";
$pontos1 = 1200;
$jogador2 = "Caio";
$pontos2 = 950;
$jogador3 = "Duda";
$pontos3 = 87;

// Cabeçalho com heredoc: várias linhas em um bloco só.
echo <<<TXT
PLACAR FINAL
------------
TXT;
echo PHP_EOL;

// %-6s alinha o nome à esquerda em 6 colunas;
// %5d alinha os pontos à direita em 5 colunas.
printf("%-6s%5d\n", $jogador1, $pontos1);
printf("%-6s%5d\n", $jogador2, $pontos2);
printf("%-6s%5d\n", $jogador3, $pontos3);

// O total é calculado e impresso na mesma largura.
$total = $pontos1 + $pontos2 + $pontos3;
printf("%-6s%5d\n", "Total", $total);

Passo a passo

  1. declare(strict_types=1) ativa a checagem estrita de tipos, um hábito recomendado em PHP moderno.
  2. Os nomes e os pontos ficam em variáveis separadas, prontos para serem formatados.
  3. O heredoc <<<TXT ... TXT; imprime as duas linhas do cabeçalho de uma vez; a última linha do bloco não tem quebra, por isso vem o echo PHP_EOL.
  4. Em %-6s, o s recebe texto, o 6 reserva seis colunas e o - alinha à esquerda, completando com espaços à direita.
  5. Em %5d, o d recebe inteiro e o 5 reserva cinco colunas alinhadas à direita, então 87 vira 87.
  6. O \n no fim do formato quebra a linha; ele funciona porque o formato está entre aspas duplas.
  7. O total é a soma das três variáveis e sai com o mesmo formato, alinhado com as linhas de cima.

Por que funciona

O printf separa o formato dos dados: o texto %-6s%5d\n descreve o desenho da linha, e os argumentos só preenchem as lacunas. Como todas as linhas usam o mesmo formato, as colunas ficam alinhadas qualquer que seja o tamanho do nome (até seis letras) ou do número (até cinco dígitos).

O heredoc resolve a parte fixa com o texto escrito do jeito que aparece na tela, e o cálculo do total mostra que a saída nasce dos dados, não de números copiados à mão.

Erros comuns

  • Trocar a ordem dos argumentos: printf("%-6s%5d\n", $pontos1, $jogador1); não dá erro: o PHP imprime 1200 0, porque o texto Lia vira 0 no %d. Mantenha os argumentos na ordem dos marcadores.
  • Esquecer o sinal de menos: %6s alinha o nome à direita ( Lia), e as colunas deixam de bater com a saída esperada.
  • Recuar o marcador de fechamento de forma diferente do conteúdo: desde o PHP 7.3 o recuo do TXT; é removido das linhas, mas uma linha com recuo menor que o do marcador gera Parse error: Invalid body indentation level. Deixe o TXT; no início da linha, como na solução.

Outra forma de resolver

Dá para usar str_pad($jogador1, 6) . str_pad((string) $pontos1, 5, " ", STR_PAD_LEFT) e imprimir com echo. Essa forma é útil quando o texto alinhado vai para uma variável ou para um arquivo, mas printf é mais curto e mais legível quando o objetivo é só imprimir.

Saída esperada

PLACAR FINAL
------------
Lia    1200
Caio    950
Duda     87
Total  2237

Últimas lições

Ver o arquivo completo →