Se você aprendeu lógica em Portugol — no Visualg, no Portugol Studio ou no caderno mesmo — a migração para PHP é mais de tradução do que de aprendizado. A lógica é exatamente a mesma: variável continua guardando valor, se continua decidindo, enquanto continua repetindo. O que muda é a roupa: palavras em inglês, cifrão antes do nome da variável, ponto e vírgula no fim de cada comando e chaves no lugar de fimse e fimenquanto.
Esse é o momento mais confuso do começo, e ele dura pouco. A sensação de "eu já sabia fazer isso e agora não sei mais" vem quase toda de detalhes de digitação, não de raciocínio. Em uma ou duas semanas escrevendo, o cifrão e o ponto e vírgula saem no automático e sobra só o que você já tinha: saber montar o passo a passo.
Este guia é a tabela de tradução completa mais três programas inteiros passados de Portugol para PHP, lado a lado, com a saída real. Se em algum ponto a parte de variáveis parecer nebulosa, o guia de variáveis em PHP destrincha só esse assunto.
A boa notícia: a lógica não muda
Portugol foi inventado para ensinar lógica sem o barulho de uma linguagem real. Tudo que ele tem — sequência, decisão, repetição, entrada e saída — existe igual em PHP, porque essas quatro coisas existem em qualquer linguagem de programação. Nenhum conceito que você aprendeu vai ser jogado fora.
O que Portugol esconde de propósito, e PHP mostra, é a exigência de precisão. O Visualg perdoa um espaço a mais, aceita acento em nome de variável, avisa em português quando você erra. O PHP não perdoa nada e reclama em inglês. Não é maldade da linguagem: é que o código que você escreve agora vai rodar num servidor de verdade, e servidor não adivinha intenção.
Tabela de equivalência: Portugol para PHP
| Em Portugol | Em PHP | Observação |
|---|---|---|
| algoritmo "nome" ... inicio | <?php | Uma linha só, no topo do arquivo. |
| fimalgoritmo | (nada) | O arquivo simplesmente acaba. |
| var idade : inteiro | $idade = 0; | Não se declara tipo; a variável nasce quando recebe valor. |
| idade <- 17 | $idade = 17; | A seta vira igual, e sempre com ponto e vírgula no fim. |
| escreva("Oi") | echo 'Oi'; | Sem quebra de linha automática. |
| escreval("Oi") | echo "Oi\n"; | O \n só funciona com aspas duplas. |
| leia(idade) | $idade = readline(); | Chega sempre como texto; converta com (int) ou (float). |
| se ... entao / senao / fimse | if (...) { } else { } | Condição entre parênteses, bloco entre chaves. |
| senao se ... entao | elseif (...) { } | Tudo junto, sem espaço. |
| enquanto ... faca / fimenquanto | while (...) { } | Mesma ideia, mesma condição. |
| para i de 1 ate 10 faca / fimpara | for ($i = 1; $i <= 10; $i++) { } | Início, condição e passo na mesma linha. |
| escolha / caso / fimescolha | switch / case / break | Em PHP cada caso precisa de break. |
| e / ou / nao | && / || / ! | Símbolos no lugar das palavras. |
| = (comparação) | == | Em PHP, um sinal só atribui; dois comparam. |
| <> (diferente) | != | Lê-se "não é igual". |
| verdadeiro / falso | true / false | Sempre em minúsculas. |
Imprima essa tabela e deixe do lado do teclado nas duas primeiras semanas. É literalmente tudo que você precisa consultar no começo.
Programa 1: média do aluno
O programa mais escrito da história das aulas de lógica. Em Portugol:
algoritmo "media"
var
nota1, nota2, media : real
inicio
escreva("Nota 1: ")
leia(nota1)
escreva("Nota 2: ")
leia(nota2)
media <- (nota1 + nota2) / 2
escreval("Media: ", media)
se media >= 6 entao
escreval("Aprovado")
senao
escreval("Reprovado")
fimse
fimalgoritmo
O mesmo programa em PHP:
<?php
echo 'Nota 1: ';
$nota1 = (float) readline();
echo 'Nota 2: ';
$nota2 = (float) readline();
$media = ($nota1 + $nota2) / 2;
echo 'Média: ' . number_format($media, 1, ',', '.') . "\n";
if ($media >= 6) {
echo "Aprovado\n";
} else {
echo "Reprovado\n";
}
Rodando e digitando 9 e 4:
Nota 1: 9
Nota 2: 4
Média: 6,5
Aprovado
Três diferenças merecem atenção. A primeira: o bloco de declaração var sumiu. Em PHP a variável nasce no instante em que recebe um valor, e você não diz se ela é inteira ou real. A segunda: readline() devolve sempre texto, mesmo quando a pessoa digita um número, por isso o (float) na frente converte para número antes da conta. A terceira: para juntar texto com valor, o PHP usa ponto — 'Média: ' . $media — no lugar da vírgula do Portugol.
O number_format não tem equivalente no Portugol e resolve um incômodo brasileiro: sem ele, o PHP imprimiria 6.5 com ponto. Os argumentos são, nessa ordem: o número, quantas casas decimais, o separador de decimal e o separador de milhar.
Programa 2: o maior de dois números
Em Portugol:
algoritmo "maior"
var
primeiro, segundo : inteiro
inicio
escreva("Primeiro numero: ")
leia(primeiro)
escreva("Segundo numero: ")
leia(segundo)
se primeiro > segundo entao
escreval("O maior e ", primeiro)
senao
se segundo > primeiro entao
escreval("O maior e ", segundo)
senao
escreval("Os dois sao iguais")
fimse
fimse
fimalgoritmo
Em PHP, o elseif deixa o encadeamento mais limpo do que os fimse aninhados:
<?php
echo 'Primeiro número: ';
$primeiro = (int) readline();
echo 'Segundo número: ';
$segundo = (int) readline();
if ($primeiro > $segundo) {
echo 'O maior é ' . $primeiro . "\n";
} elseif ($segundo > $primeiro) {
echo 'O maior é ' . $segundo . "\n";
} else {
echo "Os dois são iguais\n";
}
Rodando e digitando 12 e 30:
Primeiro número: 12
Segundo número: 30
O maior é 30
Note que aqui usamos (int) e não (float), porque o enunciado fala de números inteiros. E repare no else final sem condição nenhuma: ele cobre o único caso que sobrou, o empate. Todo encadeamento de decisões deve terminar num caso que sobra, senão existe uma situação em que o programa não fala nada.
Programa 3: contagem com para e for
Em Portugol:
algoritmo "contagem"
var
contador : inteiro
inicio
para contador de 1 ate 5 faca
escreval("Volta ", contador)
fimpara
escreval("Fim")
fimalgoritmo
Em PHP:
<?php
for ($contador = 1; $contador <= 5; $contador++) {
echo 'Volta ' . $contador . "\n";
}
echo "Fim\n";
Saída:
Volta 1
Volta 2
Volta 3
Volta 4
Volta 5
Fim
Essa é a tradução que mais assusta, porque o para contador de 1 ate 5 é praticamente português e o for parece uma fórmula. Mas os pedaços são os mesmos, só reordenados: $contador = 1 é o "de 1", $contador <= 5 é o "ate 5" e $contador++ é o passo que o Portugol fazia escondido. Depois de traduzir três ou quatro laços, a linha do for vira leitura natural.
As sete pegadinhas da mudança
- Esquecer o cifrão. Em PHP, é $nome, não nome. Sem o cifrão o PHP acha que você está chamando uma constante que não existe.
- Esquecer o ponto e vírgula. Toda linha de comando termina com ;. O erro aparece na linha seguinte à que faltou, o que confunde bastante no começo — quando o PHP reclamar de uma linha aparentemente certa, olhe a de cima.
- Usar = para comparar. if ($idade = 18) não compara nada: guarda 18 dentro de $idade e sempre entra no if. Comparação é ==.
- Misturar as aspas. Com aspas duplas, "Oi $nome" troca a variável pelo valor e "\n" vira quebra de linha. Com aspas simples, sai o texto cru. Na dúvida, use aspas simples e junte com ponto.
- Achar que readline devolve número. Devolve texto. Sem (int) ou (float), somar duas notas pode virar concatenação em vez de conta.
- Acento em nome de variável. Funciona no Visualg, mas evite: escreva $mediaFinal, sem acento, com a segunda palavra em maiúscula.
- Deixar o fimse. Parece bobo, mas acontece: o fechamento de bloco em PHP é a chave } e mais nada.
Nenhuma dessas sete é erro de lógica. Todas são erro de digitação — e é exatamente por isso que passam. Ler a mensagem de erro do PHP com calma resolve seis delas em segundos, mesmo com a mensagem em inglês: o número da linha quase sempre aponta o lugar certo ou a linha logo abaixo.
Como praticar a tradução
O melhor exercício desta fase é pegar os algoritmos que você já escreveu em Portugol na disciplina de lógica e traduzir um por dia, sem consultar o original enquanto escreve. Como você já sabe o resultado esperado, sobra atenção inteira para a sintaxe nova. Se estiver começando do zero e não tiver essa pilha de algoritmos antigos, o roteiro do guia lógica de programação por onde começar dá a sequência de assuntos na ordem.
Vale procurar um lugar de escrever e rodar sem instalar nada, porque instalar PHP na máquina no primeiro dia é uma barreira desnecessária. No Aulab, por exemplo, o exercício abre um editor de PHP que roda dentro do navegador, com readline funcionando, e a entrega vai para o professor aprovar ou devolver pedindo o ajuste — a mesma ideia da correção do caderno, só que sem papel. Dá para ver como o ciclo funciona antes de criar qualquer coisa.
Perguntas frequentes
Portugol serve para alguma coisa depois que eu aprendo PHP?
Serve como rascunho. Muito programador experiente ainda escreve o passo a passo em português antes de codificar algo confuso — é o mesmo raciocínio do Portugol, só que informal. O que não se sustenta é continuar entregando trabalho em Portugol: ele não roda em servidor nenhum e não vira produto.
Preciso declarar tipo de variável em PHP?
Não em variável comum. Você escreve $idade = 17; e pronto. PHP tem declaração de tipo em parâmetros e retornos de função, que é um assunto de mais adiante e ajuda bastante em projeto grande, mas nada disso é obrigatório para os seus primeiros programas.
Como faço o leia() do Portugol em PHP?
Com readline(), que lê o que a pessoa digita no terminal. Como o retorno é texto, converta antes de fazer conta: $idade = (int) readline(); para inteiro e (float) para número com decimais.
Por que meu número aparece com ponto no lugar da vírgula?
Porque PHP usa o padrão internacional para números. Para mostrar no formato brasileiro, passe pelo number_format: number_format($valor, 2, ',', '.') transforma 1234.5 em 1.234,50. Isso é só apresentação — por dentro, a conta continua sendo feita com ponto.
Vale a pena aprender PHP como primeira linguagem depois do Portugol?
Vale, principalmente se o seu objetivo for web. A sintaxe é próxima do que se ensina em Portugol, dá para rodar um arquivo sozinho sem montar projeto e o mercado brasileiro tem bastante sistema em PHP. Mas o mais importante nesta fase é escolher uma linguagem e ficar nela alguns meses: trocar de linguagem a cada semana é o jeito mais rápido de não firmar nenhuma.