var
Em PHP, a palavra-chave "var" declara propriedades de classe. Era comum em versões anteriores do PHP, mas foi substituída por "public".
A Palavra-chave var do PHP
var é uma palavra-chave legada para declarar uma propriedade de classe em PHP. Remonta ao PHP 4, quando as classes não tinham modificadores de acesso e toda propriedade era efetivamente pública. O PHP moderno mantém var apenas para compatibilidade retroativa — desde o PHP 5, é sinônimo exato de public.
Esta página explica o que var faz, como ele se compara aos modificadores public / private / protected que o substituíram, e por que você não deve usá-lo em código novo.
var é o mesmo que public
O ponto principal a lembrar: uma propriedade declarada com var se comporta de forma idêntica a uma declarada com public. Ambas são legíveis e graváveis de qualquer lugar — dentro da classe, em subclasses e de fora.
<?php
class User {
var $name = "Guest"; // legacy syntax
}
class Account {
public $name = "Guest"; // modern equivalent — exactly the same behavior
}
$a = new User();
$b = new Account();
echo $a->name . "\n"; // Guest
echo $b->name . "\n"; // Guest
$a->name = "Alice"; // both properties are publicly writable
$b->name = "Bob";
echo $a->name . "\n"; // Alice
echo $b->name . "\n"; // BobComo são equivalentes, misturar var e public na mesma classe é legal, mas confuso — escolha public e mantenha a consistência.
Sintaxe
Uma propriedade var pode ser declarada com ou sem valor padrão, e você pode listar várias em uma única linha:
<?php
class Config {
var $host; // no default → null
var $port = 8080; // with a default value
var $debug = false, $cache = true; // multiple at once
}
$c = new Config();
var_dump($c->host); // NULL
echo $c->port . "\n"; // 8080
var_dump($c->debug); // bool(false)Um valor padrão deve ser uma expressão constante (um literal, uma constante ou um array deles) — não pode ser o resultado de uma chamada de função ou de outro objeto.
Por que var foi substituído
O PHP 5 introduziu visibilidade real com três modificadores de acesso, e var simplesmente não conseguia expressar a diferença entre eles:
| Modificador | Acessível de |
|---|---|
public | qualquer lugar (igual a var) |
protected | a própria classe e suas subclasses |
private | apenas a classe declarante |
<?php
class BankAccount {
public $owner; // readable everywhere
protected $type; // class + subclasses
private $balance = 0; // this class only
public function deposit(int $amount): void {
$this->balance += $amount; // allowed: same class
}
public function getBalance(): int {
return $this->balance;
}
}
$acc = new BankAccount();
$acc->owner = "Alice"; // OK — public
$acc->deposit(100);
echo $acc->getBalance(); // 100
// echo $acc->balance; // Fatal error: Cannot access private propertyEncapsular $balance como private força todas as alterações a passarem por deposit(), assim a classe controla seu próprio estado. Essa garantia é exatamente o que var não pode oferecer, razão pela qual os modificadores explícitos se tornaram o padrão.
Cuidados
- Não é o
vardo JavaScript. Ovardo PHP declara apenas uma propriedade de classe. Variáveis locais dentro de funções são escritas como$x = 1;, sem palavra-chave. - Não combine com um modificador.
var public $x;é um erro de sintaxe —varé o modificador. - Propriedades tipadas não o utilizam. Desde o PHP 7.4 você escreve
public int $port;. Não existevar int $port;.
Boas Práticas
Evite var em código novo. Sempre declare a visibilidade explicitamente para que o leitor saiba o nível de acesso pretendido de imediato:
- Prefira a visibilidade mais restritiva que ainda funcione — geralmente
private, expondo dados por meio de métodos. - Use
protectedquando subclasses precisam legitimamente de acesso. - Reserve
publicpara as partes que fazem parte da interface externa do objeto.
Tópicos Relacionados
- Modificadores de Acesso do PHP —
public,privateeprotectedem profundidade. - Palavras-chave PHP
publice PHPprivate. - Classes e Objetos do PHP e a palavra-chave
class. - Construtor do PHP — inicializando propriedades quando um objeto é criado.
Conclusão
var é um resquício do PHP 4 que agora não significa mais do que public. Ainda funciona, mas esconde sua intenção. No PHP moderno, declare cada propriedade com public, protected ou private para que as regras de acesso do seu código sejam explícitas e autodocumentadas.