Menu

Variáveis em PHP: declarar, escopo, global e static

Uma variável PHP começa com $ e é criada quando você atribui um valor: $name = "Ada";. Não existe palavra-chave de declaração nem tipo fixo. Funções não enxergam variáveis de fora, a menos que você as passe, use global ou as capture; static mantém um valor entre chamadas.

Esta página tem editores executáveis - edite, execute e veja a saída na hora.

Uma variável PHP é um nome que começa com $, e você a cria atribuindo um valor: $name = "Ada";. Não há palavra-chave de declaração nem tipo para informar, porque o valor decide o tipo. Você pode atribuir um valor de outro tipo depois.

Regras para nomes de variáveis

Um nome de variável começa com $, depois uma letra ou underscore, depois quaisquer letras, dígitos ou underscores. Letras fora do ASCII contam como letras, então $名前 é válido, embora nomes ASCII sejam o padrão. Os nomes diferenciam maiúsculas de minúsculas.

NomeVálido?
$total, $userName, $user_namesim
$_count, $item2sim
$2itemsnão, não pode começar com dígito
$user-namenão, isso é $user menos name
$thisnão, reservado para o objeto atual; atribuir a ele é um erro fatal

Então $city, $City e $CITY são três variáveis diferentes. Use snake_case ($first_name) ou camelCase ($firstName), e mantenha um estilo por projeto. Os padrões de código PSR deixam o nome de variáveis em aberto de propósito; código Laravel e Symfony usa principalmente camelCase.

Usar variáveis em strings

Dentro de aspas duplas, o PHP troca as variáveis pelos valores; dentro de aspas simples, não. Coloque a variável entre chaves quando letras vierem logo em seguida ou quando você acessar um elemento de array por uma chave string:

A página sobre strings explica aspas, concatenação e interpolação em detalhe.

Variáveis indefinidas e valores padrão

Ler uma variável que nunca recebeu valor dá null, e o seu PHP imprime um aviso:

Warning: Undefined variable $discount in /home/index.php on line 3

Verifique antes com isset, ou use o operador de coalescência nula ?? para fornecer um padrão. Os dois rodam sem aviso:

$x ??= 0; é a forma curta de $x = $x ?? 0;. Valores de formulário e de URL são o caso comum: $page = $_GET['page'] ?? 1;.

Escopo de variáveis em funções

Variáveis definidas fora de uma função não são visíveis dentro dela, e variáveis criadas dentro de uma função somem quando ela retorna. Essa é a surpresa mais comum para quem vem do JavaScript:

Sem o ?? 0, a primeira função avisaria sobre um $taxRate indefinido. Passar valores como parâmetros deixa as funções previsíveis e fáceis de testar, e é o que você deve usar primeiro. A página sobre funções explica parâmetros e valores de retorno.

A palavra-chave global e $GLOBALS

Quando uma função realmente precisa usar uma variável global, declare-a com global, ou use o array $GLOBALS, que guarda todas as variáveis globais pelo nome:

Globais deixam o código mais difícil de acompanhar, porque qualquer função pode alterá-las. Elas aparecem em código antigo e em plugins WordPress (global $wpdb;); em código novo, passe os valores ou use uma classe.

Variáveis static mantêm o valor

Uma variável static dentro de uma função é criada uma vez e mantém o valor entre as chamadas. Ela continua local: o código fora da função não a enxerga.

Variáveis variáveis ($$name)

$$name usa o valor de $name como nome de outra variável. Funciona, mas arrays quase sempre fazem o mesmo trabalho com mais clareza:

<?php
$field = "color";
$$field = "blue";        // creates $color
echo $color, "\n";

// The clearer way to have names chosen at runtime:
$settings = [];
$settings[$field] = "blue";
echo $settings["color"], "\n";

Cópia ou referência

Atribuir uma variável a outra copia o valor, arrays inclusive. Coloque & na frente para que os dois nomes apontem para o mesmo valor:

Objetos se comportam de outro jeito: atribuir um objeto copia um handle para o mesmo objeto, então mudanças feitas por qualquer uma das variáveis aparecem nas duas. Use clone para uma cópia de verdade.

Erro comum: uma variável definida dentro de um if ou de um loop

O PHP não tem escopo de bloco, então uma variável criada dentro de if, for ou foreach continua existindo depois. Isso ajuda, mas esconde um bug: quando o bloco não roda, a variável nunca foi criada.

Sem a linha do valor padrão, um $orders vazio deixaria $message indefinida e imprimiria um aviso. Dê um valor a toda variável antes do bloco que pode defini-la.

Perguntas frequentes

Como declarar uma variável em PHP?

Atribua um valor a um nome que começa com $: $count = 10;. O PHP não tem palavra-chave var ou let nem tipo na declaração; a variável é criada na primeira atribuição e assume o tipo do valor.

Por que minha função não enxerga uma variável definida fora dela?

Funções PHP têm escopo local próprio e não enxergam variáveis globais automaticamente. Passe o valor como parâmetro (a opção mais limpa), declare global $name; dentro da função ou leia $GLOBALS['name']. Closures podem capturá-la com use ($name), e arrow functions fn() a capturam automaticamente.

O que é uma variável static no PHP?

Uma variável local declarada com static dentro de uma função, como static $calls = 0;. Ela é inicializada uma vez e mantém o valor entre as chamadas daquela função, o que é útil para contadores e caches simples.

Nomes de variáveis PHP diferenciam maiúsculas e minúsculas?

Sim. $name, $Name e $NAME são três variáveis diferentes. Já nomes de funções e de classes não diferenciam maiúsculas de minúsculas no PHP.

Como apago uma variável em PHP?

Chame unset($name);. Depois disso, isset($name) é false e ler a variável gera um aviso "Undefined variable". Atribuir null mantém a variável, mas a esvazia.

Ilustração das linguagens de programação do Coddy

Aprenda a programar com o Coddy

COMEÇAR