PHP do Básico ao Avançado – Aula 3 – Scripts PHP, Declaração de Variáveis e Constantes

Tempo de Leitura: 12 Minutos

Nesta terceira aula, vamos entender o que é um script PHP, ou seja, como ele funciona em relação ao servidor e ao cliente, e o básico sobre os tipos de dados, declaração de variáveis, palavras reservadas, e a estrutura de constantes e escopos, além de outros aspectos diretamente relacionados a forma de se desenvolver um sistema com o PHP, e as diretrizes para as boas práticas de programação, que todos nós programadores devemos seguir, mesmo não sendo uma exigência propriamente da linguagem.

A partir desta aula, temos em mente, que você já deve ter um computador com suporte a linguagem PHP configurado, e um serviço de banco de dados, tipo mysql ou sqlite, e um servidor de páginas http como o apache ou o próprio PHP ativos e funcionando.

Uma dica, é se você tem o PHP 5.6 ou superior instalado, você pode fazer ele funcionar como um servidor web local, para que funcione, basta o PHP estar configurado no PATH do sistema, ou que você coloque o caminho do arquivo completo (c:\php\php.exe no windows ou /usr/bin/php no linux e macOs) e que você esteja no diretório onde seus arquivos PHP estejam sendo salvos, para executar o servidor basta executar o comando:

php -S 127.0.0.1:8080

Bem, se alguém tem alguma dúvida sobre como instalar esses serviços, veja nossa aula anterior (AULA 2), que tem um tutorial básico de instalação. Neste momento em diante, vamos usar como base a IDE VSCODE, o servidor APACHE2 do XAMPP instalado no padrão, com suporte ao MariaDb/MySQL quando nos referirmos a localização, e que os arquivos com extensão .php estão sendo tratados de maneira correta pelo servidor, se você está executando de maneira diferente, adapte os caminhos e endereços de acordo com a sua instalação.

Estando configurado, apenas crie seus arquivos .php, coloque-os no seu diretório onde o servidor web busca e ele automaticamente vai interpretá-los para você. Não há necessidade de compilar nada. Pense que arquivos PHP são simples arquivos HTML (texto) com uma tags que permitem que você faça as coisas se tornarem interativas.

OLÁ MUNDO – Seu Primeiro Script PHP

Como não poderia deixar de ser, nosso primeiro script vai ser um olá mundo. Para cria-lo, acesse seu gerenciador de arquivos, e acesse o diretório onde o apache está configurado (se está no padrão da instalação, em UNIX, ele é /opt/lampp/htdocs )

Mount

No macOS, High Sierra ou mais novo, basta abrir Applications / XAMPP e acessar a aba Volumes (como mostrado na figura ao lado) clicar em Mount e assim que o diretório estiver sendo servido, clicar em Explore.
Quando fizer isso, vai abrir a tela do gerenciador de arquivos, já no diretório correto de instalação. Basta acessar a pasta htdocs que é onde o servidor está configurado para atender os arquivos.

No Windows, o diretório padrão de instalação é:C:\xampp\htdocs\

Pronto, feito isso, vamos criar uma pasta chamada CursoPHP e abrir essa pasta no VS-CODE, basta clicar sobre a pasta com o botão direito, e escolher a opção:
Abrir com… e em seguida Visual Studio Code e a pasta já vai ser aberta em dentro da sua IDE.

No meu caso, sou usuário do Linux Mint, pois gosto dele, e acho muito fácil para configurar e utilizar para desenvolvimento, mais atualmente, a escolha do sistema não passa de uma questão de gosto pessoal, já que praticamente qualquer um escolhido terá suporte a tudo o que estamos fazendo. A tela do VS-CODE aberta, deve ser similar a esta:

Onde, a esquerda temos a pasta e o explorador de arquivos, no topo a direita a área de edição de código e abaixo desta a área do terminal, onde podemos executar comandos. Como a ideia não é um curso do VSCODE, e sim de PHP deixamos os detalhes da interface, e vamos criar nosso primeiro arquivo. Ao passar com o mouse na área do explorador de arquivos, você vai ver o ícone, para criar novo arquivo e já pede para digitar o nome e a extensão, no nosso caso ola.php (quem prefere o modo teclado, utilize Ctrl+N ou Command+N) e depois para salvar utilize Ctrl+S ou Command+S digitando o nome).

Digite o trecho a seguir:

<html>
 <head>
  <title>Teste PHP</title>
 </head>
 <body>
 <?php echo "<p>Olá Mundo</p>"; ?>
 </body>
</html>

Após digitar este trecho de código, acesse seu navegador (browser) com o endereço: http://127.0.0.1/CursoPHP/ola.php e você deve ter uma saída idêntica a da figura abaixo:

Pronto, você acabou de criar o seu primeiro script PHP, ele não tem ainda muitas funcionalidades, mais nessas primeiras aulas, vamos estender esse arquivo, e onde ele se diferencia de um HTML tradicional.

Exceto pelo trecho <?php echo “<p>Olá Mundo</p>”; ?> todo o resto é somente HTML, o conteúdo dentro da tag <?php ?> é o que chamamos de MODO PHP, ou seja, a parte do código que o interpretador da linguagem vai analisar e executar. neste caso, ele simplesmente manda ecoar na saída padrão (browser) o valor contído entre aspas duplas <p>Olá Mundo</p> que também é um código HTML que vai imprimir o texto Olá Mundo.

O objetivo do exemplo é mostrar o formato especial das tags do PHP. Neste exemplo nós usamos <?php para indicar que a partir daquele ponto entramos no modo PHP. Então nós colocamos a instrução do PHP e saímos do modo PHP adicionando a tag de fechamento, ?> Um detalhe, que muitas vezes esquecemos de falar, e que vale a ressalva, mais abordaremos esse assunto mais futuramente, se você estiver editando arquivos de include para serem chamados em outras partes do seu código, é uma boa prática não colocar espaços após as tags de fechamento, pois dependendo das configurações o servidor pode imprimir um espaço na saída, e gerar um erro ou aviso por exemplo caso algum cabeçalho tente ser enviado após esse ponto. É um erro comum, até entre programadores mais experientes, porém, pode ser uma enorme dor de cabeça para ser localizado e debugado.

Obtendo as configurações atuais

Antes de proseguir com os tipos de dados tratados pelo PHP, vamos falar sobre uma função muito útil, para obter todos os módulos disponíveis e as configurações atuais do seu servidor, web e da linguagem php, como a versão, formato, data e hora, fuso horário, localização do servidor, versão das bibliotecas e módulos do sistema, e um resumo de algumas das principais funções que podem ser úteis durante o desenvolvimento de uma aplicação. Para isso, abra o arquivo que estava-mos editando e acrescente a linha <?php phpinfo(); ?> logo acima da tag </body> veja:

<html>
 <head>
   <title>Teste PHP</title>
 </head>
 <body>
   <?php echo "<p>Olá Mundo</p>"; ?>
   <?php phpinfo();?>
 </body>
</html>

A saída deste comando é uma tela similar a esta:
Onde é possível ver dados como a versão do PHP em execução, a localização do php.ini e dos demais arquivos de configuração, os sockets disponíveis, as configurações do servidor web, e do arquivo ou script em execução no ato da chamada, os cabeçalhos da comunicação (headers), as configurações rígidas (master) e as definidas no momento (mais lá na frente vamos falar sobre como setar uma configuração em tempo de execução), as extensões instaladas e a sua configuração atual, configurações de data e localização e fuso horário, data e hora do servidor, além de todas as variáveis disponíveis em $_SERVER, $_GET, $_POST, $_ENV todas essas informações são de vital importância e essa simples função é capaz de mostrar ao usuário ou programador tudo o que está disponível, auxiliando na localização de erros e de recursos disponíveis.

Variáveis de Memória, Constantes e Variáveis Especiais

Variáveis de memória, são espaços reservados pelo sistema para armazenar dados que podem ser alterados no decorrer da execução do seu script e podem conter diferentes tipos de dados, em PHP esses tipos são mutáveis por isso, uma mesma variável, pode conter vários tipos de dados conforme o local onde ela está definida.

As variáveis no PHP são representadas por um cifrão ($) seguido pelo nome da variável. Os nomes de variável são case-sensitive, ou seja $x é uma variável e $X outra. Um nome de variável válido inicia-se com uma letra ou sublinhado, seguido de qualquer número de letras, números ou sublinhados.

Não é necessário inicializar variáveis no PHP, contudo é uma ótima prática. Variáveis não inicializadas tem um valor padrão de tipo dependendo do contexto no qual são usadas – padrão de booleanos é FALSE, de inteiros e ponto-flutuantes é zero, strings (por exemplo, se utilizados em echo), são definidas como vazia e arrays tornam-se um array vazio. Confiar no valor padrão de uma variável não inicializada é problemático no caso de incluir um arquivo em outro que usa uma variável de mesmo nome.

Digite o seguinte código em um arquivo nomeado variaveis.php

<pre><?php
$x=2;
var_dump($x);
$x='a';
var_dump($x);
$x=1.1;
var_dump($x);
$x=null;
var_dump($x);
$x=TRUE;
var_dump($x);
$x=array(1,2);
var_dump($x);
$x=array('a'=>1,'b'=>2);
var_dump($x);
$x=array('a','b',1);
var_dump($x);
$x=array('a'=>'valor a', 'b'=>'Valor b', 1);
var_dump($x);
$x = (object) 'ciao';
var_dump($x);
unset($x);
var_dump($x);
?></pre>

Este arquivo ao ser executado vai produzir a saída abaixo:

int(2)
string(1) "a"
float(1.1)
NULL
bool(true)
array(2) {
  [0]=>
  int(1)
  [1]=>
  int(2)
}
array(2) {
  ["a"]=>
  int(1)
  ["b"]=>
  int(2)
}
array(3) {
  [0]=>
  string(1) "a"
  [1]=>
  string(1) "b"
  [2]=>
  int(1)
}
array(3) {
  ["a"]=>
  string(7) "valor a"
  ["b"]=>
  string(7) "Valor b"
  [0]=>
  int(1)
}
object(stdClass)#1 (1) {
  ["scalar"]=>
  string(4) "ciao"
}


Notice:  Undefined variable: x in /home/daniel/DRIVE/SITES/CursoPHP/variaveis.php on line 23

NULL

Explicando o resultado, usamos uma função do PHP var_dump(); que imprime o tipo, e a estrutura da variável, em cada linha, declaramos o valor de $x com um determinado tipo, veja, que os tipos array e array associativo podem ser considerados como um conjunto de dados, que podem ser de diversos tipos (mais lá na frente vamos ter uma aula só para tratar arrays). Veja que eliminamos a variável unset($x); e depois tentamos usa-la como se ela não tivesse sido declarada ou inicializada, e o PHP produz uma exceção em nível de AVISO, para notificar esse fato, por isso é uma boa prática sempre inicializar uma variável antes de usa-la.

Uma constante é um identificador (nome) para um valor único. Como o nome sugere, esse valor não pode mudar durante a execução do script, são similares as variáveis, para declara-las em PHP é usada a instrução declare(‘CONS’,’VAL’), onde CONS é o nome da constante, e VAL o seu valor. Digite o script a seguir em um arquivo constantes.php e veja o resultado:

<pre><?php
define('V1',1);
var_dump(V1);
define('V2',2);
var_dump(V2);
define('V3',2.1);
var_dump(V3);
define('V4',null);
var_dump(V4);
define('V5',true);
var_dump(V5);
define('V6',array(1,2));
var_dump(V6);
define('V7',array('a'=>1,'b'=>2));
var_dump(V7);
define('V8',array('a','b',1));
var_dump(V8);
define('V9',array('a'=>'valor a', 'b'=>'Valor b', 1));
var_dump(V9);
define('V1','a');
var_dump(V1);
?></pre>

Ao executar, você vai obter uma saída similar a:

int(1)
int(2)
float(2.1)
NULL
bool(true)
array(2) {
  [0]=>
  int(1)
  [1]=>
  int(2)
}
array(2) {
  ["a"]=>
  int(1)
  ["b"]=>
  int(2)
}
array(3) {
  [0]=>
  string(1) "a"
  [1]=>
  string(1) "b"
  [2]=>
  int(1)
}
array(3) {
  ["a"]=>
  string(7) "valor a"
  ["b"]=>
  string(7) "Valor b"
  [0]=>
  int(1)
}


Notice:  Constant V1 already defined in /home/romeu/www/CursoPHP/variaveis.php on line 20

int(1)

Veja, que o nome deles não contém o simbolo de $, e pode ser qualquer valor iniciado por uma letra ou underline e seguido de uma sequencia de letras, números ou underlines. Um detalhe, não recomendamos o uso de constantes com o formato _XXX_ pois o próprio PHP possui uma série de constantes pré-definidas neste formato e você pode acabar por utilizar uma e receber um aviso. O escopo de uma constante é sempre global. Você pode acessar constantes de qualquer lugar em seu script sem se preocupar com o escopo.

Veja, que quando tentamos re-definir a constante V1 o PHP nos devolve uma NOTIFICAÇÃO e não altera o seu valor. Note que o PHP também tem funções específicas para verificar se uma constante está definida, e elas podem ser definidas em qualquer parte do código.

Escopo

O PHP como a maioria das linguagens, trabalha com variáveis em escopo LOCAL, e em escopo GLOBAL, e tem uma particularidade que são as variáveis pré definidas chamadas de SUPER GLOBAIS o que pode acabar confundindo alguns programadores de outras linguagens.

Uma variável local, é um valor que só é conhecido dentro de onde ela é declarada, ou seja, se ela for usada dentro de uma função, e uma variável de mesmo nome estiver declarada fora dessa função, a variável externa não sofre nenhuma interferência.

Quando declaramos uma variável como global dizemos explicitamente para o php que queremos que ele utilize o valor e faça as modificações na variável definida fora. Quando uma variável é SUPER GLOBAL, mesmo sem haver a necessidade de declarar explicitamente que ela é uma GLOBAL, o próprio PHP interpreta ela em qualquer lugar, e a trata como uma variável global, ou seja, não há necessidade de escrever global $variavel_superglobal; para acessá-lo dentro de funções ou métodos. Veja um exemplo, digite este script em um arquivo escopo.php:

<pre>
<?php
function my_func(){
    $x=1;
    echo "Variavel Local:";
    var_dump($x);
}

function my_global(){
    global $var1;
    echo "Variavel Global:";
    var_dump($var1);
    $var1='cenoura';
    echo "Variavel Alterada na Função:";
    var_dump($var1);
}

//o script vai começar a rodar neste ponto.
$x='banana';
echo "Variavel Local:";
var_dump($x);
echo my_func();
echo 'Valor depois de executar a Função:';
var_dump($x);
echo '============== AGORA VAMOS LIDAR COM UMA GLOBAL ===============<br>';
$var1='macarrão';
echo "Variavel no Local:";
var_dump($var1);
echo my_global();
echo 'Valor depois de executar a Função:';
var_dump($var1);
?></pre>

A saída desse script é a mostrada abaixo:

Variavel Local:string(6) "banana"
Variavel Local:int(1)
Valor depois de executar a Função:string(6) "banana"
============== AGORA VAMOS LIDAR COM UMA GLOBAL ===============
Variavel no Local:string(9) "macarrão"
Variavel Global:string(9) "macarrão"
Variavel Alterada na Função:string(7) "cenoura"
Valor depois de executar a Função:string(7) "cenoura"

Veja, quando declaramos a variável $x dentro e fora da função, e fazemos os dumps, quando estamos fora ela utiliza o valor declarado fora, quando dentro utiliza a variavel declarada dentro, sem afetar o valor que se encontrava nela antes (fora). Já quando declaramos na função que queremos usar o valor declarado em global, dentro da função o valor também será o que já estava presente nela, e se acontecer alguma modificação neste valor, quando a função terminar, o valor subsequente também será alterado. Esse mesmo comportamento ocorre com as Super Globais.

Em tempo, as variáveis Super Globais definidas pelo PHP são:
$GLOBALS – Que é um array associativo de todas as variáveis definidas como GLOBAL;
$_SERVER – Que é um array associativo contendo todos os dados disponíveis e configurados no servidor;
$_GET – Contem todos os valores de variáveis passadas via método GET para o servidor
$_POST – Contem todos os valores de variáveis passadas via método POST ou outros métodos como PUT, DELETE ou qualquer outro verbo, mais na frente quando for tratar de APIs vamos utilizar muito estes recursos.
$_FILES – É um array multidimensional criado contendo os dados de arquivos enviados através de um cabeçalho enctype=’multipart/form-data’ que permite que arquivos sejam transportados pelo método POST
$_COOKIE – Contem um array de todos os valores salvos e enviados através de cookies, novamente teremos uma aula sobre isso, onde pode ser salvo pequenos dados no lado do cliente.
$_SESSION – Contem um array multidimensional de todos os dados salvos na sessão ativa, usado para controlar as sessões de usuário.
$_REQUEST – Contem uma junção dos arrays de GET e POST, ou seja, todas as variáveis enviadas para nosso script.
$_ENV – Contem um array com as variáveis enviadas como parametro para o PHP, se este for executado como um serviço, novamente, não se preocupe em entender como isso funciona neste momento.

Conclusão

Bem, você já deve ter entendido como funciona a base da linguagem PHP e como é o formato de um determinado script, e também entender como é a estrutura básica de um script PHP. Na próxima aula, vamos entender como funcionam os condicionais, e os laços de programação, que são as estruturas responsáveis pela tomada de decisão e que permitem que seu script reaja de maneira dinâmica.