Neste Tutorial PHP, falaremos um pouco sobre as variáveis e constantes no PHP, o que nos remete também a tipagem de dados.

Vimos no último post os tipos de dados com os quais o PHP pode lidar (caso não tenha lido, clique aqui), isso é importante para sabermos o que acontece com nossas variáveis e constantes.

Começaremos falando de constantes e variáveis.

 

Constantes

Como o nome já diz, uma constante é um valor fixo, ou seja, que não poderá ser alterado durante a execução do script. É muito útil quando precisamos fixar algum valor no nosso código, seja um valor de PI, um endereço de um banco de dados etc.

Um exemplo:

O código acima calcula a área de um círculo com raio 10. Veja que o valor de PI sempre será o mesmo, então pode ser definido em uma constante.

As constantes podem ser definidas de duas formas distintas:

Um outro exemplo, agora para um arquivo de configuração para banco de dados:

Observemos que temos três constantes, como estas informações não são variáveis, ou seja, não precisam ser alteradas durante a execução do script, não é necessário colocarmos ela em uma variável.

 

Segundo o PSR-1, constantes devem ser declaradas utilizando-se sempre letras maiúsculas, quando seu nome for composto, utilizamos underscore (famoso underline) separando as palavras, exemplos:

 

Variáveis

As variáveis são espaços reservados na memória para armazenamento de dados variáveis, ou seja, que recebem a atribuição de valores em tempo de execução. Sendo assim seu valor pode ser alterado a qualquer momento durante a execução do script.

Em PHP toda variável deve ser precedida pelo símbolo do cifrão ($), isto indica que aquela palavra é uma variável.

Vejamos um exemplo:

 

O nome das variáveis deve ser algo coerente com o conteúdo da variável, ou seja, precisamos evitar ao máximo o uso de variáveis com nomes como $var1, $var2 etc, isso torna nosso código menos coeso, por consequência se precisarmos fazer uma manutenção futuramente corremos o risco de não entender nosso próprio código.

O nome de uma variável pode conter letras e números, mas nunca pode iniciar com um número, sendo assim o nome a seguir é possível:

$variavel1 = ”;

 

Porém o seguinte não:

$1variavel = ”;

 

Variáveis variáveis

Ainda neste âmbito, no PHP temos o recurso de utilizar variáveis variáveis, isso significa que podemos criar uma variável com um nome vindo de outra variável, exemplo:

Se observarmos acima, podemos notar que a variável foo não foi declarada explicitamente, mas, como o valor da variável $a é “foo“, colocando um cifrão adicional antes da variável, estamos dizendo ao PHP que o nome desta nova variável será o valor da variável $a, sendo assim temos a declaração implícita da variável $foo.

 

Tá… mas onde usamos isso?

Suponhamos que estamos desenvolvendo um sistema qualquer, e que neste sistema, o usuário poderá criar fórmulas personalizadas utilizando campos dinâmicos num banco de dados, notas em um sistema de gestão escolar, por exemplo.

Notemos que diferentes escolas podem ter diferentes avaliações, e diferentes formas de obtenção da média final. Vejamos:

Escola A:

[table “1” not found /]

Média: (TM * 0.5 +P1 + P2 + C * 0.5) / 3

Escola B:

[table “2” not found /]

Média: (P1 + (CAD + PES) * 0.5 )  / 2

Analisando bem as duas escolas acima, e levando em consideração que nosso sistema pode ser instalado em n escolas com formas de avaliação totalmente diferentes, com fórmulas completamente diferentes também, faz sentido termos as variáveis variáveis, as quais poderíamos utilizar para “declarar” variáveis com o nome de cada nota do aluno recebendo seu valor e no final executar a fórmula vinda do banco de dados utilizando a função eval()*.

Uma possível solução para o problema sugerido acima seria algo do gênero:

 

Variáveis super-globais

Para finalizar a parte de variáveis, vamos falar um pouco das variáveis super-globais, estas variáveis são internas do PHP e estão acessíveis em todos os escopos e em todo o script, as variáveis super-globais disponíveis são:

  • $GLOBALS
  • $_SERVER
  • $_GET
  • $_POST
  • $_FILES
  • $_COOKIE
  • $_SESSION
  • $_REQUEST
  • $_ENV

Todas elas são arrays, sendo assim dentro delas temos vários parâmetros em cada uma, podermos também criar nossos próprios parâmetros, o que será visto mais a frente em nossa série.

 

O PSR só tem uma recomendação com relação a variáveis, que é que manter o mesmo padrão para todo o projeto, porém o praticado pela maioria dos profissionais é utilizar o camel case, ou seja, o nome da variável iniciando em letra minúscula, e caso seja um nome composto, a primeira letra de cada palavra subsequente maiúscula, por exemplo:

$variavel

$variavelComCamelCase

 

Tipagem

Toda variável recebe um conteúdo, e este conteúdo tem um tipo, que pode ser, entre outros, string, inteiro, real, booleano, conforme vimos no nosso último post. Este tipo, basicamente, diz quanto de espaço alocado em memória esta variável precisará, e o que pode ser feito com esta informação alocada neste espaço da memória.

Com relação a tipagem, podemos considerar 4 características, das quais uma linguagem se enquadrará em duas simultaneamente.

Destas 4 características, 2 delas são relacionadas a determinação do tipo da variável, e as outras 2 ao que se pode fazer com o conteúdo das variáveis.

 

Determinação do tipo de dados (Inferência de tipo)

Neste aspecto temos a tipagem estática e a tipagem dinâmica.

A tipagem estática nos obriga a informar o tipo da variável explicitamente no momento em que a declaramos, e uma vez declarada com um tipo de dados, este tipo não mudará.

Já na tipagem dinâmica, a linguagem de programação identifica o tipo da variável pelo valor associado a ela.

 

O que pode ser feito com a variável

Já neste caso, temos duas classificações, tipagem forte ou tipagem fraca (flexível).

Uma linguagem de programação é considerada de tipagem forte, quando esta não permite que se façam determinadas operações com variáveis cujo tipo não permite esta operação, por exemplo, quando tentamos somar dois textos.

Ao passo que uma linguagem é considerada de tipagem fraca quando esta permite que as operações mencionadas no paragrafo anterior possam ser realizadas, em alguns casos isso permite uma flexibilidade maior, porém uma linguagem com esta tipagem sempre exige mais atenção do programador para evitar aberrações no código.

Um exemplo, sem levar em consideração a linguagem de programação usada:

No código acima, o código nem compilaria, pois tentamos realizar uma operação que é incompatível com uma variável do tipo String (uma soma).

Se escrevermos o mesmo código em PHP, que é uma linguagem com tipagem fraca (flexível):

No código acima, a operação funcionaria, porém, conforme dito antes, é necessário uma atenção maior do programador, pois este comportamento pode gerar resultados inesperados.

Uma linguagem com tipagem fraca não significa que a linguagem em si é fraca, muito pelo contrário, significa sim, que a forma como esta linguagem trabalha com os tipos de dados é mais flexível do que a forma que uma linguagem com tipagem forte trabalharia, sendo assim, muitas vezes a torna mais robusta.

 

E… Onde o PHP fica?

O PHP é uma linguagem com tipagem dinâmica e fraca, sendo assim, o tipo de dados das variáveis é definido pelo PHP no momento em que esta variável recebe um valor, e ele permite executar operações entre as variáveis, mesmo que o tipo destas variáveis seja incompatível com a operação.

Sendo assim, o seguinte é possível no PHP:

Note que mesmo uma variável recebendo um inteiro e a outra recebendo uma string a operação foi realizada.

E se fizermos isso:

Neste caso o resultado seria 5, pois uma string que não possui um número é convertida para 0, a menos que ela comece com um valor numérico, ou seja, se nossa variável $b tivesse o valor ‘5teste’, este 5 seria somado ao valor da variável $a, e o restante da string seria ignorado.

Este comportamento pode trazer benefícios, visto sua flexibilidade, porém exige bem mais atenção por parte do programador, visto que poderia acontecer algo do tipo:

Como retorno teríamos um aviso do PHP faltando que o objeto não pode ser convertido em inteiro, e ao valor de $a seria somado 1;

A saída completa seria esta:

Notemos que mesmo gerando um aviso, o código foi executado, e, a depender da configuração de erros no php.ini, este aviso pode nem mesmo ser exibido, ocultando assim um possível bug em nosso código.

 

* Sobre a função eval() usada nas variáveis variáveis

Esta função recebe como parâmetro uma string e a interpreta como se fosse uma função do PHP, no nosso caso teríamos o resultado do cálculo da média, vejamos um possível exemplo:

Vale a pena notarmos que existe ali dentro do parâmetro do eval() executa uma string como um código PHP. Porém, quando precisamos que, além de ele executar o código, também retorne para a gente algum dado vindo deste código, usamos o comando return (como no exemplo acima).

 

Bom, ficaremos por aqui, por enquanto, espero que o tutorial PHP de hoje tenha sido útil, se foi, compartilhe, pode ser útil para mais alguém.

Acha que faltou algo?

Deixe nos comentários, será agregado ao post com os devidos créditos.

Sobre Rodrigo Teixeira Andreotti

Técnico em Informática formado pela ETE Lauro Gomes
Cursando atualmente o curso de Análise e Desenvolvimento de sistemas.

Atuo como programador PHP há, pelo menos, 6 anos, sendo os dois últimos em empresas e os demais como Freelancer.