W3docs

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";   // Bob

Como 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:

ModificadorAcessível de
publicqualquer lugar (igual a var)
protecteda própria classe e suas subclasses
privateapenas 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 property

Encapsular $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 var do JavaScript. O var do 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 existe var 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 protected quando subclasses precisam legitimamente de acesso.
  • Reserve public para as partes que fazem parte da interface externa do objeto.

Tópicos Relacionados

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.

Prática

Prática
No PHP moderno, a palavra-chave 'var' usada para declarar uma propriedade de classe é equivalente a qual modificador de acesso?
No PHP moderno, a palavra-chave 'var' usada para declarar uma propriedade de classe é equivalente a qual modificador de acesso?
Was this page helpful?