Roadmap: Dominando o ambiente #2

Roadmap: Dominando o ambiente #2

Se você já viu algo sobre linguagens de programação é provável que em algum momento você já tenha se familiarizado com a clássica sintaxe do C. O Java usa, o C usa, muitas linguagens usam! Como essa é mais ou menos a mesma pegada do PHP, então a sintaxe da linguagem não me parece um problema. Creio que o gargalo para quem começa com o PHP seja compreender o que acontece de verdade entre o navegador e o servidor.

Esse é o segundo POST da nossa proposta de fazer uma trilha para quem está começando e ainda não vou falar de código. Vou falar de ciclo de vida, estado e coragem.

Contextualização

Quando você começa a programar em uma linguagem você precisa trabalhar no ambiente dela. Algumas tem seu próprio ambiente integrado, algumas vezes proprietários, que trazem várias facilidades para você começar. No PHP o escopo é tão ilimitado que ainda não foi possível preparar algo para facilitar tanto a sua vida, portanto você vai precisar perceber o horizonte de ∞ para poder ter trabalhar “like a boss” com a linguagem.

Se não há ainda um consenso quando ao qual ambiente vamos tratar de ver como a coisa funciona. Um site não precisa de nenhuma linguagem de programação para existir. Você pode criar arquivos HTML (que é uma linguagem oriunda do XML e tem a finalidade de modelar estruturas de dados) e hospedar em um servidor web. A única coisa que um navegador quer de um servidor é o HTML e quando você usa uma linguagem no servidor para escrever isso é que você consegue dar dinamismo a sua página. Confuso ainda né!? Vou explicar mais.

Ciclo de Vida

Quando uma solicitação é feita a um servidor através do HTTP quem responde a esse pedido NUNCA é o PHP. Isso mesmo: NUNCA. O PHP nem sabe que está sendo acessado sob esse canal. Quem recebe os pedidos é o “servidor www” (em inglês — web server), uma categoria de softwares que tem a habilidade de compreender os protocolos e processar os pedidos (em inglês — request) e enviar respostas de volta (em inglês — response). Logo abaixo tem um print que tirei aqui.

Os desavisados vão pensar: Caracas, é nisso que estou me metendo? — a resposta é simples; é exatamente nisso que está se metendo. Apache (apáche), Nginx (endinéx) e Caddy (quéri) são exemplos de aplicações que possuem a habilidade de se comunicar usando HTTP. Dai você agora deveria estar se perguntando: onde está o PHP nisso tudo? — a resposta é que ele está lá esperando ser requisitado pelo serviço que vai renderizar a página. Quando a requisição é processada os softwares que proveem os servidores web interpretam o que fazer com o pedido e se comunicam com o PHP. Então o seu site não precisa necessariamente ser sempre renderizado pelo interpretador. Dependendo de como estiver o seu ambiente assets (leia-se imagens, folhas de estilo, script’s e outros) podem ser acessados diretamente deixando apenas as partes que precisam de processamento passarem pelo PHP.

Note que no parágrafo anterior eu usei “dependendo” e comecei a usar mais termos em inglês. Sinto muito mais algumas coisas ficarão vagas porque podem ser feitas de várias formas e daqui pra frente, possivelmente, vai ter português e inglês misturado porque não há sequer uma tradução razoável para alguns termos usados (como script — manuscrito — e asset — espólio).

Em um ambiente tradicional usando PHP, seu programa se inicia quando o serviço do servidor web (doravante SW) solicita a interpretação do PHP e tudo o que fez é removido da memória quando essa interpretação é devolvida para o SW. Simples assim! Sem choro nem mágoa. Sua variáveis, constantes, e tudo o mais morre. Se você entendeu mesmo tudo o que conversamos até aqui vai compreender porque o PHP só tem uma saída e não há uma forma trivial de ir escrevendo na tela do navegador informações de forma contínua, mas ainda não temos suporte para falar sobre tudo que está relacionado a isso e mais pra frente falaremos mais sobre isso.

Estado

Se o PHP é acessado indiretamente e seu programa “morre” ao fim de cada processamento esperando ser processado novamente sua página não tem estado definido. No fundo, o que um programador PHP faz é configurar como textos serão gerados para que os navegadores ao lerem esses textos possam interagir com os usuários. O termo que define esse comportamento em linguagens é “stateless” e está diretamente associado a forma com que uma linguagem pode ser usada. Enquanto algumas linguagens a aplicação fica continuamente suspensa na memória, as que não implementam estados, principalmente as interpretadas como o PHP, precisam emular alguma persistência para que a interação entre cliente e servidor precise ser reiniciada com tanta frequência.

Desse modo o protocolo HTTP entrega algumas maneiras de interação entre o cliente e o servidor, mantendo uma sessão de interação entre eles. Enquanto valores podem ser passados pela URL e pelo corpo da requisição do cliente para o servidor, os dados suspensos em sessão precisam ir embutidos nos pedidos para ficar transparente na comunicação.

Vamos dizer que eu sou o cliente e você o servidor, acabamos de nos conhecer. Eu te pergunto qual o seu nome e você me responde. Ficaria até constrangedor eu te perguntar toda hora qual o seu nome, então nesse momento criamos uma sessão entre nós e eu passo a manter o seu nome salvo na minha memória para representar você enquanto conversamos. Conversamos um pouco mais até que o assunto termina e vou para minha casa. Dependendo da importância do que foi conversado o assunto será esquecido, exigindo, inclusive, que em outro momento os nomes de ambos precisem ser trocados porque poderemos ter nos esquecido uns dos outros.

Sessões e Cookies são recursos que você enquanto programador PHP vai precisar explorar para manter algumas informações suspensas nas trocas de dados entre o seu cliente e seu programa já que você não pode prover um estado ao seu programa no servidor.

Coragem

Se você chegou até aqui você tem ainda tem coragem para continuar com PHP e ficará surpreso com o que a compreensão do que estamos apresentado para você pode fazer. Todo esse fluxo não vale apenas para o PHP, mas para qualquer linguagem para desenvolvimento de sistemas e sites para a internet.

A medida que você for avançando vai ter habilidade para compreender que algumas ferramentas, como framework’s, abstraem tudo isso. Que o PHP-FIG, por exemplo, já esboça rumos para preparar compreensões melhores sobre o HTTP, compreensão da estrutura e interação planejada com ela.

Creio que estamos prontos para configurar um ambiente de trabalho e começar a ver a mágica acontecendo.