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"; // BobComo 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:
| Modificador | Accesible desde |
|---|---|
public | en cualquier lugar (igual que var) |
protected | la propia clase y sus subclases |
private | solo 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 propertyEncapsular $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
varde JavaScript. Elvarde 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 —vares el modificador. - Las propiedades tipadas no lo usan. Desde PHP 7.4 se escribe
public int $port;. No existevar 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
protectedcuando las subclases necesiten acceso de forma legítima. - Reserva
publicpara las partes que son verdaderamente parte de la interfaz externa del objeto.
Temas relacionados
- Modificadores de acceso en PHP —
public,privateyprotecteden profundidad. - Las palabras clave PHP
publicy PHPprivate. - Clases y objetos en PHP y la palabra clave
class. - Constructor PHP — inicializar propiedades cuando se crea un objeto.
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.