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.
| Nome | Válido? |
|---|---|
$total, $userName, $user_name | sim |
$_count, $item2 | sim |
$2items | não, não pode começar com dígito |
$user-name | não, isso é $user menos name |
$this | nã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.