Nesta aula, vamos explorar o conceito de variáveis em PHP, que são fundamentais para armazenar e manipular dados. Em PHP, as variáveis são representadas pelo símbolo $ seguido de um nome, e possuem características como tipagem dinâmica, escopo definido e a possibilidade de criar variáveis com nomes dinâmicos. Compreender esses aspectos é essencial para escrever código eficiente e evitar erros comuns.

Declaração e $

Em PHP, toda variável deve começar com o símbolo $ seguido de um nome que comece com uma letra ou sublinhado (_). O nome pode conter letras, números e sublinhados, mas não pode começar com número. A declaração ocorre no momento da primeira atribuição, não sendo necessário declarar o tipo. Exemplos:

<?php
$nome = "João";
$idade = 25;
$_salario = 1500.50;
?>

O PHP é sensível a maiúsculas e minúsculas, portanto $nome e $Nome são variáveis diferentes.

Tipagem dinâmica

PHP é uma linguagem de tipagem dinâmica, o que significa que uma mesma variável pode conter valores de diferentes tipos ao longo do programa. O tipo é determinado pelo valor atribuído e pode ser alterado. Exemplo:

<?php
$valor = 10;        // inteiro
$valor = "dez";    // agora é string
$valor = 10.5;      // agora é float
?>

Isso oferece flexibilidade, mas requer cuidado para evitar erros de lógica. Funções como var_dump() ajudam a inspecionar o tipo e valor de uma variável:

<?php
$valor = 10;
var_dump($valor); // int(10)
$valor = "texto";
var_dump($valor); // string(5) "texto"
?>

Escopo

Escopo refere-se à região do código onde uma variável é acessível. Em PHP, existem três escopos principais: global, local e estático.

  • Global: Variáveis declaradas fora de funções são globais e podem ser acessadas em qualquer lugar, exceto dentro de funções sem a palavra-chave global.
  • Local: Variáveis declaradas dentro de uma função são locais e só existem dentro dela.
  • Estático: Variáveis estáticas (static) dentro de funções mantêm seu valor entre chamadas.

Exemplo de escopo global e local:

<?php
$global = "Fora";

function teste() {
    $local = "Dentro";
    echo $local; // funciona
    echo $global; // erro: variável não definida
}

teste();
echo $global; // funciona
echo $local; // erro
?>

Para acessar uma variável global dentro de uma função, use a palavra-chave global:

<?php
$global = "Fora";

function teste() {
    global $global;
    echo $global; // imprime "Fora"
}

teste();
?>

Variáveis estáticas:

<?php
function contador() {
    static $cont = 0;
    $cont++;
    echo $cont . "\n";
}

contador(); // 1
contador(); // 2
contador(); // 3
?>

Variáveis variáveis

PHP permite criar variáveis com nomes dinâmicos usando o conceito de variáveis variáveis. Isso é feito ao usar dois sinais de $. O valor de uma variável é usado como nome de outra variável. Exemplo:

<?php
$nome = "cidade";
$$nome = "São Paulo"; // cria $cidade com valor "São Paulo"
echo $cidade; // imprime "São Paulo"
?>

É útil em situações como iteração sobre arrays associativos ou criação dinâmica de variáveis, mas deve ser usado com cautela para não tornar o código confuso.

Referências

Exercícios

  1. Declare uma variável chamada $produto com o valor "Notebook" e uma variável $preco com o valor 2500. Em seguida, exiba ambos usando echo.

    <?php
    $produto = "Notebook";
    $preco = 2500;
    echo "Produto: $produto, Preço: $preco";
    ?>
  2. Qual será a saída do código a seguir? Explique brevemente.

    <?php
    $a = 10;
    $a = "PHP";
    echo $a;
    ?>

    Saída: PHP. A variável $a inicialmente recebe o valor inteiro 10, mas depois é reatribuída com a string "PHP". Como PHP é de tipagem dinâmica, o tipo muda de inteiro para string, e o último valor é exibido.

  3. Crie uma função que utilize uma variável estática para contar quantas vezes foi chamada. Chame a função três vezes e exiba o contador a cada chamada.

    <?php
    function contar() {
        static $contador = 0;
        $contador++;
        echo "Chamada $contador\n";
    }
    
    contador(); // Chamada 1
    contador(); // Chamada 2
    contador(); // Chamada 3
    ?>
  4. Usando variáveis variáveis, crie uma variável $animal com o valor "cachorro" e, em seguida, crie uma variável com o nome armazenado em $animal e atribua a ela o valor "Rex". Exiba o valor da variável $cachorro.

    <?php
    $animal = "cachorro";
    $$animal = "Rex";
    echo $cachorro; // Rex
    ?>
  5. Escreva um código que demonstre a diferença entre escopo global e local: crie uma variável global $nome com valor "Maria", e dentro de uma função tente imprimir $nome sem usar global. Explique o erro.

    <?php
    $nome = "Maria";
    
    function exibirNome() {
        echo $nome; // Aviso: variável não definida
    }
    
    exibirNome();
    ?>

    O PHP exibirá um aviso (notice) informando que a variável $nome não está definida no escopo local, pois não foi declarada dentro da função e não foi importada com global.