Home » PHP » Einführung » Variablen

Wie werden Variablen richtig verwendet?

Bei der Verwendung von Variablen kann man in PHP einiges Falsch machen. So schön die einfache Handhabung von Variablen in PHP auch ist, manchmal würde ich mir wünschen, PHP wäre an dieser Stelle restriktiver. PHP gibt den Programmierer die Möglichkeit, Variablen zu verwenden, ohne dass diese zuvor deklariert wurden. Eine Variable, die nicht deklariert ist, aber dennoch zur Ausgabe verwendet wird bei ihrer ersten Verwendung mit NULL initialisiert. Das mag auf den ersten Blick recht komfortabel klingen, ist genau genommen aber recht unsicher.

Bei der Entwicklung von neuen Scripten sollte auf dem Entwicklungsrechner stets das maximale Warnlevel aktiviert werden und die globale Registrierung von Variablen deaktiviert werden! Letzteres gilt auch für Server, die für andere Benutzer zugänglich sind.

Darstellung von Variablen

Variablen werden stehts durch ein Dollarzeichen "$" gekennzeichnet. Dieses steht vor dem Variablennamen. Variablennamen können in PHP Grundsätzlich aus allen Alphanumerischen Zeichen bestehen. Aus kompatibilitätsgrunden zu anderen Ländern empfehle ich aber, nur die Zeichen A-Z, a-z, 0-9, "_" und "-" zu verwenden. Bestimmte Zeichen sind ohnehin reserviert. Eine Variable mit dem Namen $münster wäre zwar durchaus gültig, es kann aber schnell passieren, dass auf dem Zielsystem ein anderer Zeichensatz verwendet wird und es hierdurch zu Fehlern kommt. $muenster ist die sicherere Variante der Variablenbezeichnung.

Aktivieren des höchsten Warnlevels

Die php.ini Datei enthält einen Eintrag Namens error_reporting, dieser sollte auf den Wert E_ALL gesetzt werden. Bei der Entwicklung wird so beispielsweise gemeldet, ob eine Variable ohne Deklaration verwendet wurde, ob eine nicht definierte Konstante verwendet wird oder auf ein nicht existierenden Array-Schlüssel zugegriffen wird. Am besten findet man diese Einstellungsmöglichkeit, wenn man im Editor die Suchfunktion verwendet und einfach mal nach error_reporting sucht. Die Einstellung wird aktiviert, indem der Apache Webserver nach dem Speichern der Datei neu gestartet wird.

Deaktivieren der globalen Variablen Registrierung

In neuen PHP-Versionen ist diese Einstellung standardmäßig bereits deaktiviert. Dennoch empfehle ich, einmal nach register_globals in der php.ini zu suchen, um die Einstellung zu überprüfen. Wenn die globale Registrierung von Variablen aktiviert ist, stehen Variablen, die zum Beispiel über die URL übergeben werden oder die in einem Cookie gespeichert werden, nicht mehr nur über eines der gleich folgenden Arrays unter dem entsprechenden Schlüssel zur Verfügung, sondern werden als Variable registriert. Sollte nun eine Variable per URL übergeben werden, die aus irgendwelchen Gründen nicht deklariert wurde, kann schnell ein Sicherheitsloch entstehen.

Globale Variablen

In PHP gibt es einige Variablen, die immer zur Verfügung stehen, egal ob sie vom Programmierer deklariert wurden oder nicht. Dazu gehören unter anderem: $HTTP_SERVER_VARS (oder auch $_SERVER), $HTTP_ENV_VARS (oder auch $_ENV), $HTTP_COOKIE_VARS (oder auch $_COOKIE), $HTTP_GET_VARS (oder auch $_GET), $HTTP_POST_VARS (oder auch $_POST), $HTTP_POST_FILES (oder auch $_FILES), $HTTP_SESSION_VARS (oder auch $_SESSION) und $GLOBALS.

Jede dieser Variablen ist ein Array mit einer Vielzahl von Elementen. Manche Elemente werden vom Benutzer übermittelt und manche vom Server geliefert. Die kürzere Schreibweise dieser globalen Variablen steht erst ab PHP 4.1.0 vollständig zur Verfügung. Wir können sie also problemlos verwenden. Eine Liste der Schlüssel der einzelnen Arrays steht auf der offiziellen PHP-Webseite zur Verfügung.

Arbeiten mit Arrays

Die Arbeit mit Arrays gestaltet sich sehr einfach. Im Gegensatz zu vielen anderen Sprachen, können die Werte eines Arrays von den unterschiedlichsten Datentypen sein. Der Schlüssel ist nicht einfach ein Zähler, sondern kann frei vergeben werden. Es ist jede Art von Zahl oder Zeichenkette zulässig. In PHP stehen Zahlreiche Funktionen für die Manipulation von Arrays zur Verfügung.

Wo viele Möglichkeiten sind, lauern bekanntermaßen auch viele Fehlerquellen. Also obacht bei der Mischung verschiedener Datentypen in einem Array. Vorallem, wenn Daten, die vom Benutzer eingegeben werden, ausgewertet werden, sollte stehts auf den korrekten Datentyp geachtet werden. In PHP stehen dafür entsprechende Funktionen bereit (u.a. is_string(), is_int(), is_array(), usw.).

Bei der Arbeit mit Arrays kann es vorkommen, dass nicht klar ist, ob ein Schlüssel existiert oder nicht. Vorallem bei der Arbeit mit den Variablen $HTTP_COOKIE_VARS, $HTTP_GET_VARS, $HTTP_POST_VARS, $HTTP_POST_FILES und $HTTP_SESSION_VARS wirst du häufiger auf dieses Problem stoßen. Wenn man unsauber Programmiert, greift man einfach auf diese Schlüssel zu, egal ob sie existieren oder nicht. Ich empfehle stattdessen entsprechende Zugriffsfunktionen. In der meiner PHP-Bibliothek finden sich im Bereich Umgebung entsprechende Zugriffsfunktionen.

Wie man dort sehen kann, prüfe ich, ob der Schlüssel des entsprechenden Arrays existiert, wenn nicht, wird ein Standardwert zurückgegeben. Die Überprüfung, ob ein Schlüssel existiert kann entweder mit der Funktion isset() oder array_key_exists() gemacht werden. Ob die erste oder zweite Funktion verwendet wird ist im Prinzip egal. Sie unterscheiden sich lediglich im Aufruf:
  
 1 $mein_array = array(
 2   'eins' => 'Hallo Welt!', 
 3   'zwei' => 'Und tschüss!'
 4 );
 5 
 6 var_dump(isset($mein_array['eins']));
 7 echo '<br />';
 8 var_dump(array_key_exists('zwei', $mein_array));
 9 
10 $mein_array['drei'] = 'Ein weiterer Wert';
  
An diesem Beispiel sieht man auch gleich, wie ein Array definiert wird. Arrays sind ganz normale Variablen. Die Funktion array() ist eine besondere PHP-Funktion. Sie kann unendlich viele Parameter verarbeiten. In Zeile 6 sieht man, wie man auf den Wert eines Arrays zugreifen kann. Der Zugriff erfolgt über den Namen des Arrays, gefolgt von einer offenen Eckigen Klammer "[". Anschließend folgt der Name des Schlüssels, welcher ausgegeben werden soll (Zeichenketten müssen in Anführungszeichen bzw. Hochkommas angegeben werden, ansonten sucht PHP zunächst nach einer entsprechenden Konstante. Dies Funktioniert zwar (erstmal), ist aber absolut unsicher.). Es folgt eine geschlossene Eckige Klamme "]".

Wie ich Bereits im Artikel zum Aufbau von PHP-Scriptem erwähnt hatte, funktioniert folgender Aufruf nicht:
 
1 echo "Sag doch mal: $mein_array['eins']";
 
Womit gezeigt wäre, dass man sich überhaupt garnicht erst angewöhnen sollte, Variablen Innerhalb von Zeichenketten zu verwenden. So ist es besser:
 
1 echo "Sag doch mal: " . $mein_array['eins'];
 
Syntax-Highlighting funktioniert in Editoren die dies unterstützen nun korrekt. Man gewöhnt sich eine einheitliche Schreibweise an und der Code bleibt übersichtlich. Man könnte den Array Zugriff ohne Hochkommas innerhalb des Strings machen. PHP würde dann nicht versuchen auf eine Konstante zu zugreifen. Ich sehe darin keine Vorteile, du etwa?

Vom Benutzer übergebene Variablen

Das Array $HTTP_GET_VARS enthält einen Schlüssel für jeden Wert, der mit der URL übergeben wurde. Angenommen der Benutzer erreicht dein Script über folgende URL: http://domain.de/script.php?action=open&section=news, dann stehen im Array $HTTP_GET_VARS die Schlüssel action und section mit den Werten open und news zur Verfügung. Dies ist die Grundvorraussetzung für die meisten dynamisch generierten Webseiten.

Das Array $HTTP_POST_VARS enthält meistens Daten, die über ein Formular übermittelt wurden. Vorrausgesetzt als Methode für die Übermittlung der Daten wurde post gewählt. Der Name der Schlüssel ist abhängig vom Namen der einzelnen Formularfelder.