W3docs

var

En PHP, la palabra clave "var" declara propiedades de clase. Era común en versiones anteriores, pero fue reemplazada por "public".

La palabra clave var en PHP

var es una palabra clave heredada para declarar una propiedad de clase en PHP. Data de PHP 4, cuando las clases no tenían modificadores de acceso y cada propiedad era efectivamente pública. PHP moderno mantiene var solo por compatibilidad con versiones anteriores — desde PHP 5 es un sinónimo exacto de public.

Esta página explica qué hace var, cómo se compara con los modificadores public / private / protected que la reemplazaron, y por qué no deberías usarla en código nuevo.

var es lo mismo que public

El dato clave a recordar: una propiedad declarada con var se comporta de forma idéntica a una declarada con public. Ambas son legibles y modificables desde cualquier lugar — dentro de la clase, en las subclases y desde el exterior.

<?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 son equivalentes, mezclar var y public en la misma clase es válido pero confuso — elige public y mantén la coherencia.

Sintaxis

Una propiedad var puede declararse con o sin valor predeterminado, y puedes listar varias en una sola línea:

<?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)

Un valor predeterminado debe ser una expresión constante (un literal, una constante o un array de ellos) — no puede ser el resultado de una llamada a función ni de otro objeto.

Por qué se reemplazó var

PHP 5 introdujo visibilidad real con tres modificadores de acceso, y var simplemente no podía expresar la diferencia entre ellos:

ModificadorAccesible desde
publicen cualquier lugar (igual que var)
protectedla propia clase y sus subclases
privatesolo la clase que lo declara
<?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 obliga a que todos los cambios pasen por deposit(), de modo que la clase controla su propio estado. Esa garantía es exactamente lo que var no puede ofrecer, razón por la que los modificadores explícitos se convirtieron en el estándar.

Problemas comunes

  • No es el var de JavaScript. El var de PHP solo declara una propiedad de clase. Las variables locales dentro de las funciones se escriben $x = 1; sin ninguna palabra clave.
  • No lo combines con un modificador. var public $x; es un error de sintaxis — var es el modificador.
  • Las propiedades tipadas no lo usan. Desde PHP 7.4 se escribe public int $port;. No existe var int $port;.

Buenas prácticas

Evita var en código nuevo. Declara siempre la visibilidad de forma explícita para que el lector conozca el nivel de acceso previsto de un vistazo:

  • Usa por defecto la visibilidad más restrictiva que aún funcione — normalmente private, exponiendo los datos mediante métodos.
  • Usa protected cuando las subclases necesiten acceso de forma legítima.
  • Reserva public para las partes que son verdaderamente parte de la interfaz externa del objeto.

Temas relacionados

Conclusión

var es un vestigio de PHP 4 que ahora no significa nada más que public. Sigue funcionando, pero oculta tu intención. En PHP moderno, declara cada propiedad con public, protected o private para que las reglas de acceso de tu código sean explícitas y autodocumentadas.

Práctica

Práctica
En PHP moderno, la palabra clave 'var' usada para declarar una propiedad de clase es equivalente a qué modificador de acceso?
En PHP moderno, la palabra clave 'var' usada para declarar una propiedad de clase es equivalente a qué modificador de acceso?
Was this page helpful?