PHP/Variablen

Aus Mikiwiki
< PHP
Zur Navigation springen Zur Suche springen

Variablen benennen Speicherbereiche im Rechner, in denen das Programm für einen bestimmten Zeitraum Werte speichert. Unter PHP werden Variablen bei der Formulierung von Programmalgorithmen als Platzhalter für konkrete Werte benutzt. Erst bei Ausführung des Programms werden die Platzhalter durch reale Werte ersetzt.

Variablennamen

Variablennamen beginnen immer mit dem "$"-Zeichen. Das zweite Zeichen einer Variable kann ein ASCII-Buchstabe, ein Unterstrich oder ein Zeichen zwischen ASCII 0x7F und ASCII 0xFF bestehen. Auf dieses erste Zeichen dürfen alle diese Zeichen und die Ziffern 0-9 folgen. Gross- und Kleinschreibung wird unterschieden.

$name
$NAME
$naME

Wertzuweisung an eine Variable

Zur Erzeugung einer Variable wird ihr mit dem Operator "=" ein Wert zugewiesen. Der Typ der Variable wird bei der ersten Zuweisung erkannt. Spätere Zuweisungen von Werten werden mit einer automatischen Typumwandlung vorgenommen.

$name = "Jüre Düre";   # automatische Zuordnung zum Typ "string" (Zeichenkette)
$i    = 1;             # automatische Zuordnung zum Typ "integer" (Ganzzahl)
$zahl = 14.95;         # automatische Zuordnung zum Typ "double" (Fliesskommawert)

Auflösen einer Variablen.

unset($zahl);

Prüfen, ob eine Variable einen Wert besitzt.

if (is_null($zahl)) {
  # $zahl ist NULL
}

Gültigkeitsbereiche von Variablen

Mögliche Geltungsbereiche von Variablen sind

  • lokal: innerhalb einer Funktion (ausserhalb nicht zugänglich)
  • global: ausserhalb einer Funktion (innerhalb von Funktionen nicht zugänglich, ausser wenn mit "global" deklariert)
  • statisch: behält ihren Wert innerhalb einer Funktion (ausserhalb nicht zugänglich)
  • benannte Funktionsparameter innerhalb einer Funktion

Variablen sind in PHP nur in dem Kontext gültig, in dem sie bestimmt wurden. Wird eine Variable innerhalb des Blocks einer Funktions- oder Klassenbestimmung angelegt, so ist sie ausserhalb nicht sichtbar. Ebenso gelten globale Variablen (ausserhalb der Funktion) nicht ohne weiteres innerhalb einer Funktionsbestimmung. Im folgenden Beispiel ist die Variable "$zahl" nicht bekannt.

<?php
$zahl = 22;
function ausgabe()
{
  echo $zahl;
}
ausgabe();
?>
22

Der ausdrückliche Zugriff auf globale Variablen ist jedoch mit dem Schlüsselwort "global" möglich, das PHP mitteilt, dass eine bestimmte Variable in einem globalen Kontext bereits vorhanden ist. Der Inhalt der Variable wird dann übernommen. Umgekehrt werden sich Änderungen an der Variable innerhalb des Blocks auch global widerspiegeln.

<?php
$zahl = 22;
function ausgabe()
{
  global $zahl;
  echo "Hier kommt die Zahl: $zahl";
}
ausgabe();
?>
Hier kommt die Zahl: 22

Hinter "global" können auch mehrere, durch Kommata getrennte Variablen geschrieben werden.

global $x, $y, $zahl;

Superglobale Arrays

Intern verwaltet PHP die Variablen in einem Array mit dem Namen "$GLOBALS", das zur Gruppe der "superglobalen" Variablen gehört, die immer sichtbar sind, gleichgültig in welchem Zusammenhang sie auftreten. Das letzte Beispiel kann damit auch wie folgt geschrieben werden. Zu beachten ist, dass der Parameter des Arrays der Variablenname ohne das führende "$"-Zeichen ist. Seit PHP 4.2 steht der Parameter "register_globals" ind er Datei "php.ini" auf "off", der Zugriff auf Parameter ist dann nur über das entsprechende Array möglich.

<?php
$zahl = 22;
function ausgabe()
{
  echo "Hier kommt die Zahl: ", $GLOBALS['$zahl'];
}
ausgabe();
?>
Hier kommt die Zahl: 22

PHP kennt ab Version 4.1 folgende superglobale Arrays für die wichtigsten Daten, die im Kontext des Webservers auftreten.

Arrayname Bedeutung
$GLOBALS Alle globalen Variablen
$_SERVER Servervariablen
$_GET GET-Parameter der letzten URL
$_POST POST-Parameter des Formulars
$_COOKIE Vom Webbrowser gesendete Cookies
$_FILES Hochgeladene Dateien
$_ENV Umgebungsvariablen des Betriebssystems
$_REQUEST Alle Anforderungsvariablen zusammen (GET und POST)
$_SESSION Sitzungsvariablen

Variablen innerhalb eines Gültigkeitsbereichs sind flüchtig - beim Verlassen des Blocks werden sie gelöscht, beim erneuten Eintritt wieder angelegt. In solchen Fällen müsste immer auf globale Variablen zurückgegriffen werden, was zu einem unüberschaubaren Chaos an Variablennamen führen würde. Besser sind Parameterübergaben.

Alternativ kann mit dem Schlüsselwort "static" eine Variable innerhalb eines Blocks so bestimmt werden, dass sie erhalten bleibt. Der Operator "++" erhäht die Variable jedes Mal um "1". Die Zuweisung des Startwerts erfolgt nur beim ersten Aufruf der Funktion, die drei Aufrufe führen also tatsächlich zur Ausgabe von "22", "23" und "24".

<?php
function ausgabe()
{
  static $zahl = 22;
  echo "Hier kommt die Zahl: $zahl<br />\n";
  $zahl++;
}
ausgabe();
ausgabe();
ausgabe();
?>
Hier kommt die Zahl: 22
Hier kommt die Zahl: 23
Hier kommt die Zahl: 24

Dynamische Variablen

In PHP können auch Variablennamen selbst in Variablen gespeichert werden, diese heissen dann dynamische Variablen (auch: variable Variablen). Die Zuweisung erfolgt in zwei Schritten. Zuerst wird die normale Variable (hier "$vari") erzeugt, welcher der Name der dynamischen Variable (hier "xxx") zugeordnet wird. Eine dynamische Variable nimmt den Wert einer Variablen als Namen. Der impliziten Variable kann ein Wert zugewiesen werden, indem zwei "$"-Zeichen vorangestellt werden - hier wird der impliziten Variable "$$vari" der Wert "Dynamisch" zugewiesen.

<?php
$vari  = "xxx";
echo ("Variable 'vari' ist: $vari<br />\n");
$xxx   = "PHP";
echo ("Variable 'xxx' ist: $xxx<br />\n");
$$vari = "Dynamisch"; 
echo ("Variable 'xxx' ist: $xxx<br />\n");
$vari  = "sprache";
echo ("Variable 'vari' ist: $vari<br />\n");
echo ("Variable 'sprache' ist: $sprache<br />\n");
echo ("Variable 'xxx' ist: $xxx<br />\n");
?>

Variable 'vari' ist: xxx
Variable 'xxx' ist: PHP
Variable 'xxx' ist: Dynamisch
Variable 'vari' ist: sprache
Variable 'sprache' ist:
Variable 'xxx' ist: Dynamisch

Dynamische Variablen können auch mit Arrays genutzt werden, was zu Zuordnungsproblemen führen kann. Der PHP-Parser kann nicht immer erkennen, auf welchen Teil der Konstruktion sich die Indizes beziehen. So könnte mit "$$zahl[1]" sowohl "$zahl[1]" eine Variable sein oder "$$zahl" als Teil eines Arrays mit dem Index "1". In solchen Fällen werden die logisch zusammenhängenden Teile des Ausdrucks mit geschweiften Klammern zusammengefasst, also entweder "${$zahl[1]}" oder "${$zahl}[1]".

Angenommen man möchte sich Variablen über mehrere Skripte hinweg merken, so werden die zu speichernden Variablen jedenfalls in einem Array abgelegt, wobei immer der Name der Variablen und der Inhalt zusammen ein Element ergeben. Beim Ablauf des folgenden Skripts entstehen die Variablen "$name", "$alter" und "$ort", gefüllt mit den Daten "Grimm", "37" und "München". Die entscheidende Zeile "${$var} = $val" zeigt, wie aus der Zeichenkette eine gleichlautende Variable wird.

<?php
$arrayUS = array("name"  => "Grimm", 
                 "alter" => 37, 
                 "ort"   => "München");
if (is_array($arrayUS))
{
  foreach($arrayUS as $var => $val)
  {
    ${$var} = $val;
  }
}
echo "$name wohnt in $ort und ist $alter Jahre alt.";
?>
Grimm wohnt in München und ist 37 Jahre alt.

Referenzen

Mit Referenzen kann ein Verweis auf eine Variable erstellt werden. Dabei wird der Wert nicht kopiert, sondern bleibt nur an der ursprünglichen Stelle bestehen. Ändert sich später diese Quelle, so wirkt sich das auf alle Referenzen aus.

<?php
$zahl = 14;
$ziel = &$zahl;
$zahl = 17;
echo $ziel;
?>
17