Seu primeiro programa
por Ellery BlackwoodEntenda 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.
- Todo arquivo começa com
<?php; em arquivos só com código PHP, a tag de fechamento?>é omitida. echoimprime texto e não pula linha sozinho: acrescentePHP_EOLou\nentre 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. printfformata a saída com marcadores como%s,%de%.1f;sprintfdevolve o texto em vez de imprimir.
Do conceito à prática
3 exemplos para ver a ideia funcionando.
01Olá, mundo com echo e print
<?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
<?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
<?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.
- Usar
echopara cada uma das três linhas. - Terminar cada linha com
PHP_EOL. - Imprimir exatamente os textos da saída esperada, com acentos.
<?php
// Imprima o nome da loja, o horário e o slogan, um por linha.
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
- A tag
<?phpabre o código; como o arquivo só tem PHP, não há?>no fim. - O primeiro
echoimprime o nome da loja,Mercadinho Boa Compra. - O ponto (
.) concatena o texto comPHP_EOL, a quebra de linha do sistema. - O segundo
echoimprime o horário; os acentos saem normalmente porque o arquivo está em UTF-8. - O terceiro
echoimprime o slogan e também termina comPHP_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
\nem aspas simples:echo 'Preço justo todo dia!\n';imprime a barra e a letranliteralmente. Use aspas duplas ouPHP_EOL. - Esquecer o ponto e vírgula:
echo "Preço justo todo dia!" . PHP_EOLsem;antes de outra instrução geraParse 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.
- Criar as variáveis
$leitor,$livroe$dias, com$diascomo 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éstimoe uma linha para cada dado, na ordem da saída esperada.
<?php
$leitor = "Bruno";
$livro = "Dom Casmurro";
$dias = 14;
// Imprima a ficha usando interpolação em aspas duplas.
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
- As três variáveis guardam os dados do empréstimo;
$diasrecebe14sem aspas, porque é um número. - O título é um texto fixo, então basta um
echocomPHP_EOL. - Em
"Leitor: {$leitor}", as aspas duplas fazem o PHP trocar{$leitor}porBruno. - As chaves marcam o fim do nome da variável; aqui são opcionais, mas evitam erros quando o texto continua colado.
- A linha do prazo interpola um inteiro; o PHP o converte em texto sem nenhuma função extra.
- 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}';imprimeLeitor: {$leitor}literalmente. Troque por aspas duplas. - Errar o nome da variável:
echo "Livro: {$livros}";geraWarning: Undefined variable $livrose imprimeLivro: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.
- Escrever o cabeçalho
PLACAR FINALe a linha de traços em um único heredoc. - Usar
printfcom o formato%-6s%5dem cada linha de jogador e na linha de total. - Calcular o total somando as variáveis de pontos, sem escrever o número
2237no código. - Reproduzir exatamente os espaços da saída esperada.
<?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.
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
declare(strict_types=1)ativa a checagem estrita de tipos, um hábito recomendado em PHP moderno.- Os nomes e os pontos ficam em variáveis separadas, prontos para serem formatados.
- 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 oecho PHP_EOL. - Em
%-6s, osrecebe texto, o6reserva seis colunas e o-alinha à esquerda, completando com espaços à direita. - Em
%5d, odrecebe inteiro e o5reserva cinco colunas alinhadas à direita, então87vira87. - O
\nno fim do formato quebra a linha; ele funciona porque o formato está entre aspas duplas. - 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 imprime1200 0, porque o textoLiavira0no%d. Mantenha os argumentos na ordem dos marcadores. - Esquecer o sinal de menos:
%6salinha 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 geraParse error: Invalid body indentation level. Deixe oTXT;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