PHP para Iniciantes: Sintaxe básica - tags

Se você chegou até aqui, muitíssimo obrigado pela sua ilustríssima presença! Nesse artigo irei escrever sobre o primeiro tópico que você pode encontrar na documentação oficial sobre sintaxe do PHP, mas com exemplos práticos para facilitar o entendimento. Vou colocar toda a minha experiência a prova ao tentar esclarecer para você conceitos que às vezes não entram tão fácil assim na nossa mente, hehe. Vamo nessa?

Primeiramente, o que é uma sintaxe?

Um dos problemas mais comuns para quem está chegando no universo da computação é entender o que é cada palavra, sendo que essas definições costumam ter significados bem profundos e atrelados a outras coisas ainda mais complexas. Sintaxe é uma dessas coisas. Por exemplo, se você nunca ouviu falar sobre interpretadores, talvez muito do que vou escrever irá soar ainda mais estranho.

Mas vamos falar analogamente, pode ser? Eu sempre gosto de comparar esse processo com LIBRAS (Linguagem Brasileira de Sinais), porque enquanto uma pessoa está pronunciando palavras, outra pessoa está ouvindo e convertendo em sinais para que quem tem deficiência auditiva possa entender o que está sendo pronunciado sem precisar virar um ninja da leitura labial.

O que exatamente essa pessoa está fazendo? Bem, ela está interpretando. Ela, que geralmente não é deficiente auditivo (mas poderia ser, se todo o pronunciado estiver rolando em um leitreiro por trás das câmeras, mas vamos fingir que não pode), consegue entender tanto a pronúncia das palavras quanto os símbolos em LIBRAS. Ela recebe ali, em tempo real, uma informação, transforma em outra coisa de mesmo significado e passa adiante. Quem a recebe não conseguiria entender a informação crua, mas a transformada sim.

Então, voltando pro universo da programação, uma linguagem da computação geralmente se trata de uma abstração aproximada da linguagem natural, porque seria extremamente chato programar em binário, que é a linguagem da máquina. Quando você digita alguns códigos, o interpretador recebe o que você escreveu, transforma em outra coisa de mesmo significado e passa adiante, para ser processado em instruções de máquina. Captou?

Beleza Kiko, mas e o que raios é sintaxe?

Sintaxe é justamente o domínio de conhecimento do interpretador. Voltando à analogia, se o indivíduo que está escutando sabe apenas Português, se de repente quem está pronunciando mudar para Inglês, ele não vai saber mais traduzir em LIBRAS. Você acabou de sair do domínio dele, portanto, quebrou a sintaxe. O mesmo ocorre nas linguagens de programação. Cada linguagem tem seu próprio domínio, tendo, inclusive, muitas palavras similares entre si. Na grande maioria, essas palavras são escritas em Inglês, seja de forma extensa ou por abreviações.

Um bom exemplo disso é o comando de condicional:

if (isso) {
  // então aquilo
}

Quase todas as linguagens implementam condicionais dessa forma. Mas nem todas implementam os casos alternativos (else if). Esse exemplo que citei em PHP pode ser escrito tanto junto quanto separado (elseif ou else if), vão ter o mesmo resultado. Só precisa se atentar que, ao escrever separado, você está na verdade fazendo:

if (isso) {
  // ...
} else {
  if (ouAquilo) {
    // ...
  }
}

Mas não vem ao caso agora. Em JavaScript, elseif (junto) não existe. Somente else e if, então você é forçado a usar o caso separado.

Deu para entender o que é sintaxe? Então vamos prosseguir com aquele papo sobre interpretador, afinal, PHP é uma linguagem interpretada.

Kiko, tem outros tipos de linguagens?

Com certeza. Por agora você só precisa entender que existe linguagem interpretada e linguagem compilada. O PHP se encaixa no primeiro conceito, pois ele não gera nenhum tipo de binário. Um bom exemplo de linguagem compilada é o Java, que toda vez que você muda alguma coisa, você precisa compilar novamente para gerar os binários. Mundo a fora você irá encontrar muitas outras linguagens de cada contexto, vale a pena explorar!

Mas então, quem interpreta o PHP?

À princípio, você precisa ter instalado o interpretador do PHP para executar códigos da linguagem, porém ele precisa ser acionado para que algo aconteça. Não adianta nada contratar o interpretador de LIBRAS se você não o notificou de que ele deveria interpretar o pronunciado hoje, por exemplo. Você tem de contactá-lo de alguma maneira:

  • a forma mais prática, pra quem está começando a estudar PHP, é usar o PHP-CLI. Você pode executar qualquer arquivo .php a partir do terminal pelo comando php arquivo.php, executando no mesmo diretório do arquivo;
  • outra tática é através de um WebServer. Você também pode usar o WebServer do PHP-CLI usando o comando php -S localhost:8080 (exemplo) no diretório onde estão o(s) arquivo(s) .php, porém não é recomendado usar em produção, beleza? Roda na sua máquina pra testar seu ambiente e... só! Se quiser um WebServer pra colocar no ar, procura ler um pouco sobre Apache, Nginx, PHP-FPM, etc. São coisas além do que você vai ver nesses artigos por agora.

PS.: é sempre bom ler, mas não vá estudar o que mencionei ainda! Tá indo direto pro nível mais embaixo e é muita coisa pra absorver de uma vez, hehe.

Em ambos os casos, o próprio processo do PHP é quem interpreta os códigos na hora que você solicita a execução. É interpretação em runtime, ao vivo, hehe.

Vamos fazer um teste?

  1. Primeiramente, instale o PHP na sua máquina. Note que precisamos do PHP-CLI, não um WebServer como Apache, que é mencionado várias vezes no guia que linkei. Porém, fique a vontade para instalar o que quiser para rodar o seu código (Wamp, Xampp, Lampp, o que te deixar mais confortável);
  2. Então, crie uma pasta em qualquer diretório para colocar os nossos exercícios desse artigo (sugestão de nome da pasta 001-sintaxe-basica);
  3. Nessa pasta, adicione o arquivo index.php. O termo index é amplamente utilizado na computação e que significa índice. Se você cria um índice de alguma coisa, significa que ele é o guia de navegação. Quando alguém acessa a sua pasta no webserver sem descrever qual arquivo quer carregar, por padrão, os WebServers buscam o "arquivo índice", o index. Há várias possibilidades de formatação, desde index.html, index.htm, index.asp, etc. Só depende da linguagem que está usando e como o WebServer está configurado. No nosso caso, queremos o index.php;
  4. Preencha o arquivo com o seguinte conteúdo: ola mundo (sim, só esse texto);
  5. Inicialize o webserver na pasta criada. Como pedi para usar PHP-CLI, apenas vou demonstrar o comando para tal. Se você seguiu pelo caminho das trevas, infelizmente, não posso te ajudar, rs. Enfim: rode php -S localhost:8088 na pasta onde está o index.php (sim, mudei a porta de propósito);
  6. Abra um navegador e carregue a URL http://localhost:8088. O que deve aparecer é uma página em branco com "ola mundo" escrito.

Imagem mostrando resultado que aparece ao abrir o link no navegador

Aêêê, programei em PHP....?!

Sinto muito, mas não. Você só testou o servidor mesmo, hahaha. Até porque o texto cru não tem nada da sintaxe de PHP. E pra entender o motivo disso, você precisa entender o que é que o PHP gera para o servidor.

Tags e resultados

Por padrão, quando você executa um script PHP, ele retorna um texto ou HTML. Esse retorno é composto pela interpretação e execução binária de toooodo o fluxo do código. Dito isso, é preciso especificar qual parte ainda não foi interpretada usando a tag<?php para iniciar o trecho que deve ser interpretado e ?> para indicar que o trecho foi encerrado.

PS.: se você não sabe o que é tag, reveja os conceitos sobre HTML.

PS.2: Ah, se o arquivo não tiver mais nada além do trecho a interpretar, você não precisa colocar ?> no final. Isso é bom para evitar caracteres de editores de código ruins.

Tá, Kiko, mas como que isso acontece?

Vamos lá... O webserver mandou o PHP executar o arquivo index.php, certo? Então o PHP abre o arquivo e, em paralelo, abre um canal de dados para inserir tudo o que for concluído. Então, ele vê o que está no arquivo e analisa byte a byte, procurando pelo seu catalizador (<?php).

Enquanto não encontrar, ele vai jogando os dados no canal onde fica o resultado final. Encontrando essa chave, aí o jogo muda: ele pára de jogar os dados e executa todas as instruções que lhe forem passadas, para pegar qualquer coisa que tenha gerado e voltar a adicionar dados ao canal.

Pera, velho, tá rápido demais.

ola mundo
<?php
echo " bao";

No código acima, o interpretador irá ler "ola mundo" e entender que é apenas um texto a retornar. Mas quando ele encontrar a tag de abertura, <?php, imediatamente vai passar a procurar pelas palavras reservadas de seu domínio a fim de executar alguma coisa. No caso, eu usei o comando echo (documentação oficial), que recebe uma String (texto) e adiciona ao canal que mencionei anteriormente. Veja que o texto está entre aspas duplas... Isso é porque você precisa explicar para o interpretador que aquilo é um dado e não um comando. Eu poderia ter usado aspas simples, mas esse assunto fica pro artigo sobre tipagens, beleza?

Então, o interpretador verá o echo e irá pegar o texto e adicionar ao canal de resultado, como mencionei agora há pouco. Com isso, o resultado final da execução acima será ola mundo bao.

Imagem ilustrando resultado que apareceria ao rodar o arquivo alterado

Beleza... Mas por que o PHP precisa retornar um texto ou HTML? Cadê as provas?

Na realidade, o PHP pode retornar o que você quiser. Texto/HTML é apenas o padrão. Se você quer retornar um JSON, ou um binário de uma imagem, ou um XML, é só alterar o cabeçalho (quer aprender como fazer? fala aí nos comentários).

E sim, eu posso provar que o padrão é assim mesmo. Abre outro terminal e roda o comando CURL curl -s -I localhost:8088 para ver o cabeçalho que seu arquivo está retornando.

No meu caso, retornou isso:

HTTP/1.1 200 OK
Host: localhost:8088
Date: Wed, 28 Jul 2021 02:43:37 GMT
Connection: close
X-Powered-By: PHP/7.2.25
Content-type: text/html; charset=UTF-8

Que raios é isso, Kiko?

Então, isso é o cabeçalho de retorno de uma requisição HTTP. Logo na primeira linha, ele indica o status da requisição. Tem um padrão sobre essas numerações que traz vários significados, mas não importa agora.

Logo abaixo, temos a identificação da hospedagem, que no caso é o endereço que usamos no navegador.

Depois, tem a data/hora de quando a execução aconteceu. Meio tarde né? Eu tava com insônia mesmo, hahaha.

E depois, tem o status da conexão, que também não adianta querer entender muito agora - mas sim, poderia ser uma conexão aberta aguardando novos bytes.

Em seguida, tem a identificação do WebServer, que é uma tremenda falha de segurança para deixar aberto em produção. Quando você deixa esse tipo de informação exposta na internet, os hackers vão saber a versão do seu WebServer e logo vão procurar pela tabela de falhas de segurança para explorar um ataque ao seu ambiente. Por isso, se você tem alguma hospedagem retornando essa informação no CURL, pode bater* em alguém pra tirar isso do ar!

* bater: dialogar pacificamente demonstrando senso de urgência sem nenhum tipo de agressão e/ou assédio.

E por último mas não menos importante, temos o tipo do retorno. text/html é justamente o tipo de retorno que diz que pode ser tanto um texto cru quanto um texto em HTML. Além disso, ele diz até o charset (UTF-8) para indicar qual codificação de caracteres o navegador precisa usar para traduzir o binário da resposta.

Legal?! Legal. Se você chegou até aqui, comenta: eu tava lá, eu era bao!

Voltando à tag <?php, também existe um atalho para encurtar uma simples chamada de echo em uma linha. Entretanto, esse atalho depende de uma configuração estar ativa, portanto, não é recomendado utilizá-lo.

Esse atalho é a tag <?=, que PRECISA ser encerrada pela tag ?>. É apenas um atalho, sério. Ao invés de escrever

<?php
echo "testando";

Você pode escrever

<?="testando"?>

Faz o teste aí ;)

E com isso, você conheceu as tags essenciais para começar a escrever um código em PHP. Você se sente preparado para avançar? Comenta aí! Qualquer dúvida poderá gerar uma boa discussão e talvez até uma menção nos próximos artigos.

Inté!