W3docs

var

In PHP wird das Schlüsselwort "var" zur Deklaration von Klasseneigenschaften verwendet. Es stammt aus früheren PHP-Versionen und wurde durch "public" ersetzt.

Das PHP-Schlüsselwort var

var ist ein veraltetes Schlüsselwort zur Deklaration einer Klasseneigenschaft in PHP. Es stammt aus PHP 4, als Klassen keine Zugriffsmodifikatoren besaßen und jede Eigenschaft faktisch öffentlich war. Modernes PHP behält var nur aus Gründen der Abwärtskompatibilität – seit PHP 5 ist es ein exaktes Synonym für public.

Diese Seite erläutert, was var bewirkt, wie es sich im Vergleich zu den Modifikatoren public / private / protected verhält, die es abgelöst haben, und warum es in neuem Code vermieden werden sollte.

var entspricht public

Die wichtigste Tatsache: Eine mit var deklarierte Eigenschaft verhält sich identisch zu einer mit public deklarierten. Beide sind von überall aus les- und schreibbar – innerhalb der Klasse, in Unterklassen und von außen.

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

Da sie gleichwertig sind, ist das Mischen von var und public in derselben Klasse zwar erlaubt, aber verwirrend – verwenden Sie public und bleiben Sie konsistent.

Syntax

Eine var-Eigenschaft kann mit oder ohne Standardwert deklariert werden, und mehrere können in einer Zeile aufgeführt werden:

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

Ein Standardwert muss ein konstanter Ausdruck sein (ein Literal, eine Konstante oder ein Array davon) – er darf nicht das Ergebnis eines Funktionsaufrufs oder eines anderen Objekts sein.

Warum var ersetzt wurde

PHP 5 führte echte Sichtbarkeit mit drei Zugriffsmodifikatoren ein, und var konnte den Unterschied zwischen ihnen schlicht nicht ausdrücken:

ModifikatorZugreifbar von
publicüberall (wie var)
protectedder Klasse selbst und ihren Unterklassen
privatenur der deklarierenden Klasse
<?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

Durch die Kapselung von $balance als private werden alle Änderungen über deposit() erzwungen, sodass die Klasse ihren eigenen Zustand kontrolliert. Genau diese Garantie kann var nicht bieten, weshalb explizite Modifikatoren zum Standard wurden.

Fallstricke

  • Es ist nicht das var aus JavaScript. Das PHP-var deklariert ausschließlich eine Klasseneigenschaft. Lokale Variablen innerhalb von Funktionen werden mit $x = 1; ohne Schlüsselwort geschrieben.
  • Nicht mit einem Modifikator kombinieren. var public $x; ist ein Syntaxfehler – var ist der Modifikator.
  • Typisierte Eigenschaften verwenden es nicht. Seit PHP 7.4 schreibt man public int $port;. Es gibt kein var int $port;.

Best Practices

Vermeiden Sie var in neuem Code. Deklarieren Sie die Sichtbarkeit immer explizit, damit der Leser die beabsichtigte Zugriffsebene auf einen Blick erkennt:

  • Standardmäßig die restriktivste Sichtbarkeit verwenden, die noch funktioniert – in der Regel private, mit Datenzugang über Methoden.
  • protected verwenden, wenn Unterklassen legitimen Zugriff benötigen.
  • public für die Teile reservieren, die wirklich zur externen Schnittstelle des Objekts gehören.

Verwandte Themen

Fazit

var ist ein Überbleibsel aus PHP 4, das heute nichts anderes bedeutet als public. Es funktioniert noch, verbirgt aber die Absicht. In modernem PHP sollte jede Eigenschaft mit public, protected oder private deklariert werden, damit die Zugriffsregeln des Codes explizit und selbstdokumentierend sind.

Übung

Übung
Welchem Zugriffsmodifikator entspricht in modernem PHP das Schlüsselwort 'var' zur Deklaration einer Klasseneigenschaft?
Welchem Zugriffsmodifikator entspricht in modernem PHP das Schlüsselwort 'var' zur Deklaration einer Klasseneigenschaft?
Was this page helpful?