Menu

PHP Variablen: Deklaration, Scope, global und static

Eine PHP-Variable beginnt mit $ und entsteht durch eine Zuweisung: $name = "Ada";. Es gibt kein Schlüsselwort zur Deklaration und keinen festen Typ. Funktionen sehen äußere Variablen nur, wenn du sie übergibst, global nutzt oder sie einfängst; static behält einen Wert zwischen Aufrufen.

Diese Seite enthält ausführbare Editoren - bearbeiten, ausführen und Ausgabe sofort sehen.

Eine PHP-Variable ist ein Name, der mit $ beginnt, und du erzeugst sie, indem du einen Wert zuweist: $name = "Ada";. Es gibt kein Schlüsselwort zur Deklaration und keinen Typ, den du angeben musst, denn der Wert bestimmt den Typ. Später kannst du einen Wert eines anderen Typs zuweisen.

Regeln für Variablennamen

Ein Variablenname beginnt mit $, dann folgt ein Buchstabe oder Unterstrich, danach beliebige Buchstaben, Ziffern oder Unterstriche. Nicht-ASCII-Buchstaben zählen als Buchstaben, also ist $名前 gültig, auch wenn ASCII-Namen üblich sind. Namen unterscheiden Groß- und Kleinschreibung.

NameGültig?
$total, $userName, $user_nameja
$_count, $item2ja
$2itemsnein, darf nicht mit einer Ziffer beginnen
$user-namenein, das ist $user minus name
$thisnein, für das aktuelle Objekt reserviert; eine Zuweisung ist ein fataler Fehler

$city, $City und $CITY sind also drei verschiedene Variablen. Verwende snake_case ($first_name) oder camelCase ($firstName) und bleib pro Projekt bei einem Stil. Die PSR-Coding-Standards lassen die Benennung von Variablen absichtlich offen; Code in Laravel und Symfony verwendet meist camelCase.

Variablen in Strings verwenden

In doppelten Anführungszeichen ersetzt PHP Variablen durch ihre Werte, in einfachen nicht. Setze die Variable in geschweifte Klammern, wenn direkt Buchstaben folgen oder wenn du ein Array-Element über einen String-Schlüssel ansprichst:

Die Seite zu Strings behandelt Anführungszeichen, Verkettung und Interpolation im Detail.

Undefinierte Variablen und Standardwerte

Eine Variable zu lesen, der nie etwas zugewiesen wurde, ergibt null, und dein PHP gibt eine Warnung aus:

Warning: Undefined variable $discount in /home/index.php on line 3

Prüfe vorher mit isset oder verwende den Null-Coalescing-Operator ??, um einen Standardwert zu liefern. Beides läuft ohne Warnung:

$x ??= 0; ist die Kurzform von $x = $x ?? 0;. Werte aus Formularen und URLs sind der typische Fall: $page = $_GET['page'] ?? 1;.

Scope von Variablen in Funktionen

Variablen, die außerhalb einer Funktion definiert sind, sind darin nicht sichtbar, und Variablen, die in einer Funktion entstehen, verschwinden, wenn sie zurückkehrt. Das überrascht Umsteiger aus JavaScript am häufigsten:

Ohne das ?? 0 würde die erste Funktion vor einem undefinierten $taxRate warnen. Werte als Parameter zu übergeben hält Funktionen vorhersehbar und leicht testbar, und das solltest du zuerst tun. Die Seite zu Funktionen behandelt Parameter und Rückgabewerte.

Das Schlüsselwort global und $GLOBALS

Wenn eine Funktion wirklich eine globale Variable verwenden muss, deklarierst du sie mit global oder gehst über das Array $GLOBALS, das jede globale Variable unter ihrem Namen enthält:

Globale Variablen machen Code schwerer nachvollziehbar, weil jede Funktion sie ändern kann. Sie tauchen in älterem Code und in WordPress-Plugins auf (global $wpdb;); in neuem Code übergibst du Werte oder verwendest eine Klasse.

static-Variablen behalten ihren Wert

Eine static-Variable in einer Funktion wird einmal erzeugt und behält ihren Wert zwischen den Aufrufen. Sie bleibt trotzdem lokal: Code außerhalb der Funktion sieht sie nicht.

Variable Variablen ($$name)

$$name verwendet den Wert von $name als Namen einer anderen Variable. Das funktioniert, aber Arrays erledigen dieselbe Aufgabe fast immer klarer:

<?php
$field = "color";
$$field = "blue";        // creates $color
echo $color, "\n";

// The clearer way to have names chosen at runtime:
$settings = [];
$settings[$field] = "blue";
echo $settings["color"], "\n";

Kopie oder Referenz

Wenn du eine Variable einer anderen zuweist, wird der Wert kopiert, auch bei Arrays. Setze ein & davor, damit beide Namen stattdessen auf denselben Wert zeigen:

Objekte verhalten sich anders: Eine Zuweisung kopiert einen Verweis auf dasselbe Objekt, also sind Änderungen über die eine Variable auch über die andere sichtbar. Für eine echte Kopie verwendest du clone.

Typischer Fehler: eine Variable, die in einem if oder einer Schleife gesetzt wird

PHP hat keinen Block-Scope, also existiert eine Variable, die in if, for oder foreach entsteht, auch danach noch. Das ist praktisch, versteckt aber einen Bug: Wenn der Block nicht läuft, wurde die Variable nie erzeugt.

Ohne die Zeile mit dem Standardwert würde ein leeres $orders die Variable $message undefiniert lassen und eine Warnung ausgeben. Gib jeder Variable einen Wert vor dem Block, der sie setzen könnte.

Häufig gestellte Fragen

Wie deklariert man eine Variable in PHP?

Weise einem Namen, der mit $ beginnt, einen Wert zu: $count = 10;. PHP hat kein Schlüsselwort wie var oder let und keinen Typ in der Deklaration; die Variable entsteht durch die erste Zuweisung und übernimmt den Typ ihres Werts.

Warum sieht meine Funktion eine außerhalb definierte Variable nicht?

PHP-Funktionen haben ihren eigenen lokalen Scope und sehen globale Variablen nicht automatisch. Übergib den Wert als Parameter (die saubere Lösung), deklariere global $name; in der Funktion oder lies $GLOBALS['name']. Closures können ihn mit use ($name) einfangen, und Arrow Functions fn() fangen ihn automatisch ein.

Was ist eine static-Variable in PHP?

Eine lokale Variable, die in einer Funktion mit static deklariert wird, etwa static $calls = 0;. Sie wird einmal initialisiert und behält ihren Wert zwischen den Aufrufen dieser Funktion. Das ist praktisch für Zähler und einfache Caches.

Unterscheiden PHP-Variablennamen Groß- und Kleinschreibung?

Ja. $name, $Name und $NAME sind drei verschiedene Variablen. Funktions- und Klassennamen dagegen unterscheiden in PHP keine Groß- und Kleinschreibung.

Wie lösche ich eine Variable in PHP?

Rufe unset($name); auf. Danach ist isset($name) gleich false, und das Lesen ergibt eine Warnung „Undefined variable“. Eine Zuweisung von null behält die Variable, leert sie aber.

Illustration der Programmiersprachen bei Coddy

Lerne mit Coddy zu programmieren

LOS GEHT'S