var
In PHP, la parola chiave "var" serve a dichiarare proprietà di classe. Era comune nelle versioni precedenti di PHP, sostituita da "public", "private" e "protected".
La parola chiave PHP var
var è una parola chiave legacy per dichiarare una proprietà di classe in PHP. Risale a PHP 4, quando le classi non avevano modificatori di accesso e ogni proprietà era di fatto pubblica. Il PHP moderno mantiene var solo per compatibilità con le versioni precedenti — da PHP 5 è un sinonimo esatto di public.
Questa pagina spiega cosa fa var, come si confronta con i modificatori public / private / protected che l'hanno sostituita, e perché non dovresti usarla nel codice nuovo.
var equivale a public
Il fatto fondamentale da ricordare: una proprietà dichiarata con var si comporta in modo identico a una dichiarata con public. Entrambe sono leggibili e scrivibili da qualsiasi punto — all'interno della classe, nelle sottoclassi e dall'esterno.
<?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"; // BobPoiché sono equivalenti, mescolare var e public nella stessa classe è lecito ma fonte di confusione — scegli public e mantieni la coerenza.
Sintassi
Una proprietà var può essere dichiarata con o senza valore predefinito, ed è possibile elencarne più di una sulla stessa riga:
<?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 valore predefinito deve essere un'espressione costante (un letterale, una costante o un array di questi) — non può essere il risultato di una chiamata a funzione o di un altro oggetto.
Perché var è stata sostituita
PHP 5 ha introdotto una vera visibilità con tre modificatori di accesso, e var semplicemente non riusciva a esprimere la differenza tra di essi:
| Modificatore | Accessibile da |
|---|---|
public | ovunque (come var) |
protected | la classe stessa e le sue sottoclassi |
private | solo la classe dichiarante |
<?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 propertyIncapsulare $balance come private obbliga tutte le modifiche a passare per deposit(), così la classe controlla il proprio stato. Questa garanzia è esattamente ciò che var non può offrire, motivo per cui i modificatori espliciti sono diventati lo standard.
Attenzione a questi aspetti
- Non è
vardi JavaScript. Lavardi PHP dichiara solo una proprietà di classe. Le variabili locali all'interno delle funzioni si scrivono$x = 1;senza alcuna parola chiave. - Non combinarla con un modificatore.
var public $x;è un errore di sintassi —varè il modificatore. - Le proprietà tipizzate non la usano. Da PHP 7.4 si scrive
public int $port;. Non esistevar int $port;.
Buone pratiche
Evita var nel codice nuovo. Dichiara sempre la visibilità in modo esplicito, così chi legge conosce immediatamente il livello di accesso previsto:
- Come impostazione predefinita usa la visibilità più restrittiva che funzioni ancora — di solito
private, esponendo i dati tramite metodi. - Usa
protectedquando le sottoclassi hanno effettivamente bisogno dell'accesso. - Riserva
publicalle parti che fanno davvero parte dell'interfaccia esterna dell'oggetto.
Argomenti correlati
- Modificatori di accesso PHP —
public,privateeprotectedin dettaglio. - Le parole chiave PHP
publice PHPprivate. - Classi e oggetti PHP e la parola chiave
class. - Costruttore PHP — inizializzazione delle proprietà alla creazione di un oggetto.
Conclusione
var è un retaggio di PHP 4 che ora significa nient'altro che public. Funziona ancora, ma nasconde le intenzioni. Nel PHP moderno, dichiara ogni proprietà con public, protected o private in modo che le regole di accesso del codice siano esplicite e auto-documentanti.