PHP para Iniciantes: Sintaxe básica - instruções fragmentadas e comentários

Para o artigo de hoje, peço que não utilize nenhum WebServer pois estaremos apenas manipulando textos, tudo bem? Se você abrir o comando no navegador não terá o mesmo comportamento de quebra de linha do CLI, o que pode prejudicar o entendimento do que está acontecendo. Irei falar sobre os tópicos "Escaping from HTML" (implicitamente), "Instruction separation" e "Comments" presentes na documentação oficial de sintaxe básica.

No artigo anterior, você descobriu como inicializar um código PHP pela tag <?php e como encerrá-lo com ?>. Pelo entendimento que geramos é: tudo o que está fora das tags é texto puro e tudo o que está dentro será processado pelo interpretador. Hoje iremos um pouco além, mostrando que é possível fragmentar várias instruções em tags separadas ao longo do arquivo.

Mas vamos com calma. Primeiro, você precisa entender o que acontece com as tags do PHP. Por exemplo, se você quer escrever um diálogo como:

- Oi, Joao!
- Oi, Maria!

Você precisará expor duas linhas diferentes. Supondo que a primeira linha virá na tag PHP, é preciso ressaltar que, por padrão, a quebra de linha que vem depois do ?> é ignorada. Quer ver na prática?

Se você fizer o script:

<?php echo '- Oi, Joao!'; ?>
- Oi, Maria!

Você terá como resultado no CLI:

- Oi, Joao!- Oi, Maria!

Ué, onde foi parar a quebra de linha?

É justamente o que eu disse: é ignorada. Para que uma nova linha seja criada, você teria de adicionar mais uma quebra de linha ou concatenar a declaração de End Of Line (PHP_EOL) na string. Como é muito cedo pra falar sobre EOL, que tal só dar mais um Enter?

<?php echo '- Oi, Joao!'; ?>

- Oi, Maria!

Resulta em:

- Oi, Joao!
- Oi, Maria!

Agora sim, né? Porém não é só isso que pode ser impactado pelas tags. Como mencionado no artigo anterior, a sintaxe de condicionais do PHP é composta pelas palavras-chave if, elseif e else. Eu não vou me aprofundar nisso pois é assunto para artigos posteriores (Estruturas de Controle - IF). Porém, é preciso compreender desde já que essas estruturas de condicionais formam blocos que podem ser fragmentadas em diferentes tags do PHP.

Inclusive, isso é um recurso amplamente utilizado no PHP de rua. Se você pegar um código antigo eu tenho certeza que irá encontrar algo do gênero:

Um texto qualquer
<?php
if (algumaCoisa) {
?>
Se entrou na condicional
<?php
} else {
?>
Se entrou na alternativa
<?php
}

Isso é o equivalente a:

Um texto qualquer
<?php
if (algumaCoisa) {
    echo 'Se entrou na condicional';
} else {
    echo 'Se entrou na alternativa';
}

Ué, Kiko, mas quando chega no ?> o PHP não para de interpretar?

Exatamente, mas veja que uma estrutura de condicional representa um bloco de instrução. Para que o interpretador entre naquele bloco, a condicional precisa ser verdadeira. Por tanto, se algumaCoisa não for uma condição válida, ele irá imediatamente saltar para a alternativa (else) e capturar todo o bloco de código dele (que vai até o encerramento da instrução de condicional, }, na próxima tag).

Com isso, fica evidente que você pode fragmentar todas as instruções em diferentes tags ao longo do arquivo. Ainda assim, você provavelmente não vai encontrar esse tipo de código em um projeto que segue as PSRs, porque vão respeitar a linguagem como back-end e separar as camadas de texto em estruturas de texto, de fato.

Comentários

Outro recurso bastante comum entre as linguagens é a capacidade de adicionar comentários ao longo do código. São, geralmente, linhas que devem ser ignoradas pelo interpretador e, pra cada caso, temos uma sintaxe diferente.

As funções que comentários podem empenhar em um código são bem variantes. No geral, você pode deixar ali uma explicação do que o trecho do código faz ou até mesmo usar a sintaxe da sua IDE para auxiliar outros recursos como Autocomplete. Enfim, independente do motivo do comentário, nós podemos nos deparar com dois cenários:

1. Um comentário em uma linha

Se você deseja adicionar alguma observação no código em uma única linha, a sintaxe mais adequada para o que você precisa é // (duas barras). Essa instrução ordena que o interpretador deve ignorar tudo o que for escrito até o final da linha ou bloco de código, o que vier primeiro. O "fim de linha" é compreensível, mas você entendeu o que é "fim de bloco de código" nesse contexto?

<?php
// um comentário ?>
ola, tudo bom?

Se o interpretador ignorasse somente a linha, ao chegar na tag ?>, ele iria ignorar e continuar interpretando a linha seguinte, dando erro porque "ola" não é um comando válido, etc. Dito isso, a tag ?> representa o "fim de bloco".

Além dessa sintaxe, também temos a hashtag #, que também serve para manter um comentário em uma única linha. Ele funciona exatamente como a instrução //, exceto que tem uma instrução similar que tem uma função completamente diferente no PHP 8, que é a #[ (Atributo).

<?php
# um comentário ?>
ola, tudo bom?

2. Um comentário em várias linhas

Entretanto, se o que deseja é colocar um comentário em várias linhas, você pode usar a sintaxe de bloco de comentário, que começa com /* e termina com */. Nesse caso, quando o interpretador encontrar a instrução inicial /*, ele vai ignorar tudo até encontrar a instrução de fim de bloco de comentário */, mesmo se no meio de tudo isso tiver alguma tag de encerramento do PHP.

<?php
/* um comentario ?>
ola, tudo bom? */

Se você chegou até aqui, comenta nd acontece feijoada!

No caso acima, o PHP não irá imprimir nada pois o comentário só acaba no final. Exemplos de uso de comentário:

<?php
// Função que soma $a + $b
function soma($a, $b) {
    return $a + $b;
}

/*
Função que subtrai $a - $b
$a precisa ser inteiro
$b precisa ser inteiro
*/
function subtrai($a, $b) {
    return $a - $b;
}

Nota: se você iniciar um comentário em bloco (/*) e não encerrá-lo, o interpretador acusará um erro de sintaxe. Todo comentário precisa ser encerrado.

Compreendido? Enfim, por hoje é só! Com isso encerramos o tópico de sintaxe básica da documentação oficial. No próximo artigo começaremos a falar sobre tipagens. É um assunto bem legal pois quase tudo é compartilhado com outras linguagens. Se você já tem experiência com programação vai entender tudo com facilidade, mas meu desafio é tornar isso fácil até pra quem não tem... Por tanto, não esqueçam de deixar um feedback!

Inté!