W3docs

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

Poiché 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:

ModificatoreAccessibile da
publicovunque (come var)
protectedla classe stessa e le sue sottoclassi
privatesolo 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 property

Incapsulare $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 è var di JavaScript. La var di 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 esiste var 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 protected quando le sottoclassi hanno effettivamente bisogno dell'accesso.
  • Riserva public alle parti che fanno davvero parte dell'interfaccia esterna dell'oggetto.

Argomenti correlati

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.

Pratica

Pratica
Nel PHP moderno, la parola chiave 'var' usata per dichiarare una proprietà di classe equivale a quale modificatore di accesso?
Nel PHP moderno, la parola chiave 'var' usata per dichiarare una proprietà di classe equivale a quale modificatore di accesso?
Was this page helpful?