PHP/Variablen
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 |
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 |