MÓDULO 2 — Repetição, arrays e funções (o “motor” do PHP)
Aula 4 — Laços (for, while, foreach) sem
sofrimento
A Aula 4 é o
momento em que você para de “mandar o PHP fazer uma coisa uma vez” e começa a ensinar
o PHP a repetir tarefas do jeito certo. Isso parece simples, mas é uma das
habilidades que mais economizam tempo e evitam código duplicado. Afinal, muita
coisa no mundo real é repetição: listar produtos, exibir alunos de uma turma,
montar uma tabela de preços, gerar números de pedido, imprimir boletos,
calcular parcelas… se você tentar fazer tudo na mão, linha por linha, seu
código cresce rápido, fica cansativo de manter e vira uma bagunça. É aqui que
entram os laços de repetição, também chamados de loops.
Antes de ver os
tipos de laço, vale entender a ideia central: um loop é uma estrutura que
executa um bloco de código várias vezes, seguindo uma regra. Essa regra pode
ser “repita 10 vezes”, “repita enquanto isso for verdadeiro” ou “para cada item
dessa lista, faça algo”. E, quando você entende esse conceito, muita coisa fica
mais natural: você não está “repetindo por repetir”, você está automatizando um
padrão. Programar bem tem muito a ver com reconhecer padrões e ensinar a
máquina a executá-los com consistência.
O primeiro laço
que costuma aparecer é o for, que é como um contador organizado. Ele é perfeito
quando você já sabe quantas vezes quer repetir algo. Por exemplo: “mostre os
números de 1 a 10”, “faça a tabuada do 7”, “crie 12 parcelas”, “gere 5
tentativas”. O for tem uma estrutura que parece um mini roteiro: você define
por onde começa, até onde vai e de quanto em quanto ele anda. E, mesmo que no
início pareça estranho, a lógica é bem humana: “comece em 1, enquanto for menor
ou igual a 10, some 1”. Uma vez que isso entra na cabeça, você começa a
enxergar for em todo lugar.
Na prática, o
exemplo da tabuada é ótimo porque dá para visualizar o resultado sem esforço.
Você escolhe um número (por exemplo, 7) e pede para o for multiplicar esse
número por 1, 2, 3… até 10. O que era um trabalho repetitivo vira um bloco
curto e claro. E existe uma lição pedagógica muito boa aqui: você aprende a
confiar em uma estrutura que “faz sozinha” a parte chata. Ao mesmo tempo,
aprende que o resultado depende de você definir bem as regras de início, fim e
passo. Se o loop começa errado ou termina errado, ele não vai adivinhar — ele
vai obedecer.
Depois do for, normalmente entra o
while, que é uma repetição guiada por condição. Ele é ideal
quando você não sabe exatamente quantas vezes vai repetir, mas sabe qual é o
critério para parar. É como dizer: “enquanto houver saldo, continue
descontando”, “enquanto o usuário não acertar a senha, peça de novo”, “enquanto
a fila não estiver vazia, processe o próximo”. O while é poderoso, mas também
exige atenção, porque é fácil cair em um erro clássico: o loop que nunca
termina. Isso acontece quando a condição continua verdadeira para sempre. Por
isso, o while pede um cuidado didático: sempre perguntar “o que, dentro do
laço, vai mudar para que ele pare?” Se nada muda, a repetição fica infinita e o
programa trava ou se comporta de forma inesperada.
Um jeito simples
de entender isso é imaginar uma porta automática que só fecha quando o sensor
para de detectar alguém. Se o sensor nunca “desliga”, a porta nunca fecha. No
while, é igual: se a variável que controla a condição não muda, você fica preso
no loop. Então, desde cedo, é bom criar o hábito de garantir que a condição de
parada está bem desenhada. Isso é uma das marcas de maturidade no começo da
programação: não é só fazer funcionar, é fazer funcionar sem riscos escondidos.
E aí chega o
laço que costuma ser o favorito de quem começa a trabalhar com listas: o
foreach. A lógica do foreach é muito próxima da linguagem humana: “para cada
item desta lista, faça tal coisa”. Ele é perfeito quando você tem um conjunto
de dados e quer percorrer um por um. Mesmo antes de mergulhar fundo em arrays,
dá para apresentar a ideia de lista: imagine que você tem nomes de alunos, ou
produtos, ou categorias. Em vez de acessar manualmente “o primeiro, o segundo,
o terceiro…”, o foreach te dá uma forma limpa e segura de caminhar por tudo.
Ele ajuda a reduzir erros, porque você não precisa controlar índices ou
contadores o tempo inteiro; você só se concentra no que quer fazer com cada
item.
Um ponto
importante dessa aula é perceber que loops não servem apenas para “mostrar
números”. Eles servem para construir resultados. Você pode somar valores,
montar textos, gerar blocos de HTML, contar ocorrências, filtrar dados,
preparar relatórios. Por exemplo, ao listar produtos, você pode ir acumulando
um total; ao listar notas, pode calcular a média; ao percorrer uma lista de
pedidos, pode separar os que estão “pendentes” dos “pagos”. Ou seja, o laço é
uma espécie de esteira: cada item passa por você e você decide o que fazer com
ele.
É comum, nessa aula, aparecer
outra habilidade essencial: aprender a ler loops com calma.
Muitas dificuldades no início não são porque o aluno “não sabe PHP”, e sim
porque ele se perde no fluxo: “em que momento essa variável muda?” “quantas
vezes isso roda?” “por que está repetindo 11 vezes e não 10?” Por isso, é muito
didático incentivar o aluno a testar com números pequenos e imprimir resultados
intermediários. Se você imprime o valor do contador a cada volta, seu cérebro
acompanha o passo a passo e o loop deixa de ser um “mistério”.
No final da Aula 4, o aluno começa a perceber uma mudança de postura: ele deixa de programar só com linhas únicas e passa a programar com estruturas que automatizam padrões. Isso é um salto importante. E não é exagero dizer que loops são um dos fundamentos que sustentam praticamente qualquer sistema. A partir daqui você está preparado para lidar melhor com listas (arrays), catálogos, relatórios e, mais adiante, dados vindos de formulários e bancos de dados. A repetição, quando bem usada, não é “fazer mais do mesmo”; é tornar o código mais enxuto, mais claro e mais inteligente.
Referências bibliográficas
ALMEIDA, Marco
Antonio. PHP: Programando com Orientação a Objetos. São Paulo: Novatec
Editora, 2016.
NIEDERAUER,
Juliano. Desenvolvendo Websites com PHP. São Paulo: Novatec Editora,
2019.
WELLING, Luke;
THOMSON, Laura. Desenvolvimento Web com PHP e MySQL. Rio de Janeiro:
Alta Books, 2018.
SCHULTZ,
Alexandre; SCHULTZ, Fábio. Lógica de Programação e Algoritmos. São
Paulo: Bookman, 2019.
Aula
5 — Arrays: guardando e acessando listas do mundo real
A Aula 5 é
quando o PHP começa a “organizar a casa”. Até agora, você trabalhou com
variáveis que guardam uma informação por vez: um nome, um preço, uma idade. Mas
a vida real raramente vem em dose única. Normalmente, a gente lida com listas:
vários produtos, vários alunos, vários pedidos, vários valores. E é aqui que
entram os arrays, que são, de forma bem simples, um jeito de guardar
muitos dados dentro de uma única estrutura. Se variáveis são caixinhas
individuais, o array é como uma gaveta com divisórias — você coloca vários
itens ali e depois encontra cada um quando precisa.
No começo, o array mais fácil de entender é o array “simples”, também chamado de indexado. Ele funciona como uma lista numerada: item 0, item 1, item 2… Isso pode estranhar, porque a contagem começa em zero, mas logo vira parte do jogo. Se você tem uma lista de frutas, por exemplo, você pode guardar tudo em um array e acessar
cada posição. É um passo enorme, porque você deixa de criar variáveis
soltas como $produto1, $produto2, $produto3 e passa a ter uma coleção
organizada. Isso melhora o código, evita repetição e facilita alterações:
adicionar um novo item vira uma linha, e não uma “reforma” no arquivo inteiro.
Depois que o
aluno entende a ideia de lista, começa a fazer sentido o foreach da aula
anterior. O foreach é quase o “melhor amigo” dos arrays: você pega uma lista e
percorre item por item com naturalidade. E isso abre um caminho muito prático:
em vez de escrever vários echo para mostrar cada coisa, você cria um array e
manda o PHP exibir tudo em um laço. É como trocar o trabalho manual por uma
linha de produção. E, pedagogicamente, isso dá uma sensação boa: com pouco
código, você consegue resultados maiores e mais profissionais.
A Aula 5 também
apresenta um tipo de array que deixa tudo ainda mais próximo do mundo real: o array
associativo. Em vez de usar apenas números como “chave” (0, 1, 2), você usa
nomes. É como transformar a gaveta em um fichário, onde cada ficha tem um
rótulo. Por exemplo, um produto pode ter “nome” e “preço”. Em vez de guardar
isso como duas listas separadas, você pode usar chaves como nome e preco. Esse
formato é ótimo porque o código fica mais legível: quando você lê algo como
$produto['preco'], você entende imediatamente o que está sendo acessado. Ele
não está pegando “o segundo item”; ele está pegando “o preço”.
E é aqui que
aparece um conceito que, sem complicar, já é muito útil: representar um
“registro” com array associativo. Em termos simples, dá para pensar que cada
produto é um pequeno conjunto de informações relacionadas. E quando você junta
vários desses registros em uma lista, você tem algo que se parece com um
catálogo. Esse tipo de estrutura é extremamente comum em sistemas reais, porque
é uma forma de organizar dados antes mesmo de ter um banco de dados. É como
montar uma planilha dentro do PHP: cada linha é um produto, e cada coluna é uma
informação dele.
Um ponto didático importante dessa aula é aprender a diferença entre criar, acessar e alterar dados no array. Criar é colocar os itens; acessar é pegar o que já existe; alterar é atualizar valores. Isso parece óbvio, mas evita muitos erros. Por exemplo, é comum o aluno tentar acessar uma chave que não existe e ficar confuso quando dá aviso ou quando o resultado vem vazio. Então, faz parte do aprendizado criar o hábito de conferir se o índice ou a chave está certa, e entender
dados no array. Criar é colocar os itens; acessar é pegar o
que já existe; alterar é atualizar valores. Isso parece óbvio, mas evita muitos
erros. Por exemplo, é comum o aluno tentar acessar uma chave que não existe e
ficar confuso quando dá aviso ou quando o resultado vem vazio. Então, faz parte
do aprendizado criar o hábito de conferir se o índice ou a chave está certa, e
entender que arrays dependem muito de consistência: se você escreveu 'preco' em
um lugar e 'preço' em outro, para o PHP são duas chaves diferentes. Esse tipo
de detalhe parece pequeno, mas é um dos campeões de erros em projetos
iniciantes.
Outra ferramenta
que entra com força nesta aula é o count(), que diz quantos itens existem
dentro de um array. Isso é útil de um jeito muito real: às vezes você quer
mostrar “Você tem 3 itens no carrinho”, ou quer rodar um laço “até acabar a
lista”, ou quer validar se a lista veio vazia. Em vez de adivinhar, você
pergunta ao PHP: “quantos itens têm aqui?”. Esse é um exemplo bonito de como
programação é, muitas vezes, fazer perguntas certas ao computador.
Conforme você
trabalha com arrays, também surge uma noção de cuidado com apresentação. Ao
exibir uma lista de produtos e preços, por exemplo, não basta “jogar na tela”.
É interessante formatar, deixar organizado, separar com linhas, talvez usar um
pouco de HTML básico para ficar legível. E isso conversa com uma habilidade
essencial do desenvolvimento web: você não está só calculando coisas — você
está comunicando informações para alguém. E a organização do array ajuda
justamente nisso: facilita exibir de forma limpa e padronizada.
Um exercício bem clássico e muito útil nesta aula é montar um pequeno catálogo com uns cinco produtos, cada um com nome e preço, e depois exibir todos usando foreach. Nesse momento, a ficha costuma cair: você percebe que arrays são o caminho natural para trabalhar com “vários dados” sem transformar o código numa colcha de retalhos. E, mais importante, você começa a enxergar o início de estruturas que vão crescer depois: carrinho de compras, lista de usuários, tabela de notas, agenda de contatos. Tudo isso, lá na frente, vai ser alimentado por banco de dados — mas, antes de chegar no banco, o array é o laboratório perfeito para aprender.
No final da Aula 5, a grande conquista é entender que arrays não são “um assunto a mais”, e sim uma forma de pensar melhor. Eles te ajudam a organizar dados, percorrer listas com facilidade e construir saídas mais completas. É como sair
de conquista é entender que arrays não são “um assunto a mais”, e sim uma forma de pensar melhor. Eles te ajudam a organizar dados, percorrer listas com facilidade e construir saídas mais completas. É como sair de uma mesa cheia de papéis soltos e colocar tudo em pastas com etiquetas: você encontra mais rápido, erra menos e consegue aumentar o sistema sem se perder. Quando o aluno domina arrays simples e associativos, ele ganha uma base sólida para avançar para funções, formulários e, em breve, para estruturas mais próximas de aplicações reais.
Referências bibliográficas
ALMEIDA, Marco
Antonio. PHP: Programando com Orientação a Objetos. São Paulo: Novatec
Editora, 2016.
NIEDERAUER,
Juliano. Desenvolvendo Websites com PHP. São Paulo: Novatec Editora,
2019.
WELLING, Luke;
THOMSON, Laura. Desenvolvimento Web com PHP e MySQL. Rio de Janeiro:
Alta Books, 2018.
SCHULTZ,
Alexandre; SCHULTZ, Fábio. Lógica de Programação e Algoritmos. São
Paulo: Bookman, 2019.
Aula
6 — Funções: como reaproveitar código e organizar melhor
A Aula 6 é o
momento em que o aluno começa a sentir que está programando “com mais
elegância”. Até aqui, você já aprendeu a lidar com variáveis, condições, laços
e arrays. Só que, conforme os exercícios ficam mais completos, surge um
problema bem comum: o código começa a repetir pedaços parecidos. Você calcula
total em um lugar, formata preço em outro, valida texto em outro… e, quando
percebe, está copiando e colando trechos. Funciona? Até funciona. Mas vira
bagunça rápido. É aqui que entram as funções, que são como “pequenas
ferramentas” que você cria para usar sempre que precisar.
Uma função é, em
essência, um bloco de código com nome. Você dá um nome que faz sentido (por
exemplo, formatarMoeda ou calcularTotal) e guarda ali dentro uma lógica
específica. Quando precisar daquela lógica de novo, em vez de reescrever tudo,
você chama a função. Isso deixa o código mais curto, mais fácil de ler e muito
mais simples de manter. É como cozinhar com receitas prontas: você não precisa
reinventar o passo a passo toda vez que fizer o mesmo prato.
Um ponto didático importante é entender que função não é “complicação”; é organização. Ela ajuda a separar responsabilidades: uma parte do sistema calcula, outra valida, outra formata. E isso é uma forma de pensar que acompanha o aluno em qualquer linguagem. Quando você aprende a criar funções, você aprende a construir código que cresce sem virar um monstro. E mesmo em projetos pequenos, a diferença é
ponto
didático importante é entender que função não é “complicação”; é organização.
Ela ajuda a separar responsabilidades: uma parte do sistema calcula, outra
valida, outra formata. E isso é uma forma de pensar que acompanha o aluno em
qualquer linguagem. Quando você aprende a criar funções, você aprende a
construir código que cresce sem virar um monstro. E mesmo em projetos pequenos,
a diferença é enorme: você consegue olhar para o arquivo e entender rapidamente
o que está acontecendo, porque as funções viram “títulos” claros do que cada
etapa faz.
Para uma função
ser realmente útil, ela costuma receber parâmetros, que são valores que
você passa para ela trabalhar. É como uma calculadora: a calculadora é a mesma,
mas você digita números diferentes. Em PHP, os parâmetros entram entre
parênteses. Por exemplo, uma função calcularDesconto($valor, $percentual) pode
receber dois valores e devolver o resultado do desconto. O bonito aqui é
perceber que a função fica reutilizável: você pode usar com R$ 100 e 10%, ou
com R$ 250 e 15%, sem mudar a lógica interna.
E aí entra um
conceito que dá um salto de entendimento: o return. Quando uma função “retorna”
algo, ela devolve um resultado para quem a chamou. Isso é diferente de dar echo
dentro da função. Muitas vezes, no começo, o aluno tenta imprimir tudo e se
confunde. Mas é mais saudável aprender a separar: a função calcula e devolve;
quem chama decide se vai mostrar na tela, guardar em variável, comparar numa
condição, ou usar em outra conta. Essa separação deixa seu código mais flexível
e evita aquela sensação de que está tudo misturado.
Um exemplo bem
real para esta aula é a formatação de valores. Em projetos de verdade, preço
aparece o tempo inteiro. Se você formata “na mão” toda vez, além de repetitivo,
você pode formatar de jeitos diferentes e deixar a interface inconsistente. Com
uma função formatarMoeda($valor), você resolve isso. Sempre que for exibir um
preço, chama a função. E pronto: padrão estabelecido. Esse tipo de função
pequena parece simples, mas é o que dá “cara profissional” ao código e
economiza muito tempo.
Outro uso muito comum de funções é validação. Imagine que você precisa verificar se um texto está vazio, ou se um número é válido, ou se um campo foi preenchido. Você pode criar uma função como estaVazio($texto) e usá-la em diferentes partes do sistema. Isso não só reduz repetição, como também reduz erros, porque a regra fica centralizada. Se amanhã você quiser melhorar a validação (por
exemplo,
considerar espaços em branco), você ajusta em um lugar só e o resto do sistema
já se beneficia.
Nesta aula,
também é importante reforçar a ideia de que funções devem ser pequenas e com
um propósito claro. Existe uma tentação natural de criar uma função enorme
que faz tudo: calcula, valida, imprime, decide frete, monta HTML… e aí você
volta para o mesmo problema de antes, só que “embrulhado”. Uma boa função é
como uma ferramenta específica: martelo bate prego, chave de fenda aperta
parafuso. Se você tenta criar uma ferramenta que faz tudo, ela não faz nada
direito. Então o aluno aprende a perguntar: “qual é a única responsabilidade
desta função?” Se a resposta for longa demais, talvez seja hora de dividir.
Um detalhe que
ajuda muito a aprender funções é perceber que elas criam uma espécie de “mundo”
próprio: variáveis declaradas dentro da função, em geral, não existem fora
dela. Isso pode confundir no começo, mas é uma proteção útil: evita que uma
parte do código atrapalhe outra. Quando você precisa que algo venha de fora,
você passa por parâmetro. Quando precisa devolver algo, você usa return. Esse
fluxo deixa o código mais previsível. E previsibilidade, na prática, é o que
torna um sistema confiável.
Ao final da Aula 6, o aluno passa a ter uma nova capacidade: transformar lógica repetida em peças reutilizáveis. Isso prepara o terreno para projetos mais completos, porque agora você consegue montar um “kit” de funções: calcular total, aplicar desconto, formatar valores, validar dados… E quando essas peças estão prontas, montar uma página com orçamento ou carrinho fica muito mais leve. Você deixa de lutar contra o código e começa a construir com ele.
Em resumo, funções são o passo que separa “código que funciona” de “código que funciona e dá gosto de manter”. Elas ajudam a organizar, reaproveitar e tornar o projeto mais claro. E, para quem está começando, essa é uma conquista enorme: você começa a programar com mais tranquilidade, porque sabe que não precisa repetir tudo, nem carregar o arquivo inteiro nas costas. Você cria uma função, confia nela e segue adiante.
Referências bibliográficas
ALMEIDA, Marco
Antonio. PHP: Programando com Orientação a Objetos. São Paulo: Novatec
Editora, 2016.
NIEDERAUER,
Juliano. Desenvolvendo Websites com PHP. São Paulo: Novatec Editora,
2019.
WELLING, Luke;
THOMSON, Laura. Desenvolvimento Web com PHP e MySQL. Rio de Janeiro:
Alta Books, 2018.
SCHULTZ, Alexandre; SCHULTZ, Fábio. Lógica de Programação e
Algoritmos. São
Paulo: Bookman, 2019.
Estudo de caso do Módulo 2: “O Carrinho do
Seu Zé — a lista que quebrou o site (e como consertar)”
O Seu Zé tem uma lojinha online bem simples, feita
“no improviso” para testar vendas no bairro. Ele não quer nada sofisticado por
enquanto: só uma página que mostre os produtos do carrinho, some o total e
aplique um desconto quando fizer sentido. Parece tranquilo… até começar a
crescer.
O aluno do curso (responsável pelo código) já domina o básico do Módulo 1. Agora, com o Módulo 2, ele aprende a lidar com repetição (Aula 4), arrays (Aula 5) e funções (Aula 6). Só que, no caminho, aparecem os erros clássicos — aqueles que fazem o sistema “funcionar às vezes” e falhar do nada. Vamos acompanhar o drama e, principalmente, as soluções.
Contexto
do problema
O carrinho precisa fazer quatro coisas:
1.
Exibir a lista
de itens
2.
Calcular o total
3.
Aplicar desconto
de 10% se total > 200
4.
Mostrar tudo
formatado e organizado
A lógica é simples. O desafio é não se enrolar no código.
Cena
1 — “Por que ele pulou um produto?” (erros de loop)
O aluno usa for para percorrer uma lista de
produtos. Só que um item sempre some, ou aparece um “índice inexistente” no
final.
Erro
comum 1: laço indo além do tamanho do array
Por
que acontece
Como
evitar
Erro
comum 2: contador começando errado
Como
evitar
Atalho
seguro
Cena
2 — “Meu total tá dando errado… e quanto mais itens, pior” (erros ao somar)
O aluno tenta somar os preços, mas o total vira um
número absurdo ou vira texto.
Erro
comum 1: concatenar em vez de somar
Como
evitar
Erro
comum 2: não resetar o total
Como
evitar
Erro
comum 3: preço em formato errado
Como
evitar
Cena
3 — “Undefined index / Undefined array key” (erros de array e chaves)
O aluno monta produtos como array associativo, mas do nada aparece erro dizendo que a chave não existe.
Erros
comuns
1.
Inconsistência
de chaves: preco num item e preço em outro
2.
Digitação
diferente: nomeProduto vs nome_produto
3.
Acessar uma
chave sem garantir que ela existe
Como
evitar
Mentalidade
útil
Cena
4 — “Meu foreach tá estranho… aparece ‘Array’ na tela” (exibição errada)
O aluno tenta imprimir o array inteiro com echo
$produto; e o PHP responde com “Array”.
Erro
comum
Como
evitar
Cena
5 — “Criei uma função linda…, mas ficou pior” (funções gigantes e confusas)
O aluno decide “organizar” e cria uma função que:
A função vira um monstrinho. Funciona? Até funciona,
mas ninguém entende.
Erro
comum
Como
evitar
Regra
de ouro
Cena
6 — “Minha função não enxerga a variável do lado de fora” (escopo)
O aluno cria $desconto = 0.10; fora da função e acha
que dentro da função ela vai funcionar automaticamente. Aí dá erro ou fica
zero.
Erro
comum
Como
evitar
Lição
Como
o sistema do Seu Zé ficou “profissional” no final (sem complicar)
Depois de sofrer um pouco, o aluno reestrutura o código
assim:
1.
O carrinho é um
array de itens padronizados (nome, preco, qtd)
2.
Um foreach lista
os itens e exibe na tela
3.
Uma função
calcula o total (sem imprimir nada)
4.
Outra função
aplica desconto se necessário
5.
Uma função
formata valores para exibição
O resultado: código mais curto, mais claro, mais confiável.
Checklist
rápido: os 8 erros mais comuns do Módulo 2 (e o antídoto)
Acesse materiais, apostilas e vídeos em mais de 3000 cursos, tudo isso gratuitamente!
Matricule-se AgoraAcesse materiais, apostilas e vídeos em mais de 3000 cursos, tudo isso gratuitamente!
Matricule-se Agora