PHP-Programmierung: Variablen vs. Konstanten

Der Gebrauch von Variablen und Konstanten

Wenn Sie sich die Beispieldatei unseres config.php anschauen, werden Sie feststellen, dass hier oftmals nicht nur Konstanten definiert wurden, sondern auch Variablen.
In diesem Artikel soll auf den Gebrauch beider eingegangen werden. Wann sollten Sie in einem PHP-Programm eine Variable und wann eine Konstante benutzen, wenn Sie diese Daten oftmals wieder gebrauchen wollen.

Konstante mit define

Eine Konstante wird in PHP mit dem Ausdruck

define(‚Konstantennamen‘,’Konstantenwert‘);

definiert. Diese benutzerdefinierte Konstante ist eine wirkliche Konstante und ist nur einmal in einem PHP Programm definiert. Sie können die Konstante nicht überschreiben, da sie, wenn einmal definiert immer ihren Wert behält.

Klar, deshalb heißt sie ja auch Konstante 🙂

Man kann zwar abfragen, ob eine Konstante schon definiert ist und ihr erst dann im Coding einen Wert zuweisen. Doch ändert das nichts an der Tatsache, dass die Konstante nicht ihren Wert ändern wird. Im config-Beispiel haben wir darauf zugegriffen, als wir die „Codesicherung“ eingeführt haben:

<?PHP
defined(“APPL_VALID_VAR”) or die( ‘Der direkte Zugriff zu config.php ist nicht erlaubt.’ );

Die Funktion defined prüft ab, ob die Konstante „APPL_VALID_VAR“ definiert ist. Wenn ja dann geht das Programm weiter. Wenn nein, kommt der ODER (or) – Zweig der Anweisung zum Tragen und es wird eine Fehlermeldung mit die() ausgegeben. Was bedeutet, dass das PHP-Programm beendet wird.

Variablendefinition

Eine Variable wird mit

$Variablenname = ‚wert‘;

definiert. Es ist das Wesen einer Variablen, dass man ihren Wert zu jedem Zeitpunkt verändern kann. Deshalb heißt sie ja auch Variable :-)!

Vor- und Nachteile

Die Frage bleibt, wann sollten Sie was benutzen?

  1. Immer, wenn Sie sich sicher sind, dass sich ein Wert nicht ändern kann, ist eine Konstante angebracht. Typisches Beispiel ist eine Konstante mit dem letzten Änderungsdatum des Quellprogramms [define(‚lastUPD‘,’01.01.2012′)];
  2. Ist eine Konstanz nicht gegeben, dann eignet sich eine Variable besser. Dies ergibt sich häufig, wenn Sie zum Beispiel über alle Funktionen des Programms die Seitenüberschrift der HTML-Seite ausgeben wollen. Da sich die aktuelle Seite ändern kann, obwohl eine bestimmte Funktion im PHP gerade läuft, ist der Seitenname eigentlich keine Konstante, sondern eine Variable.
  3. Konstanten sind im Programm einmal definiert immer bekannt, da PHP sie in einem eigenen Datenbereich im Speicher hält. Dies gilt nicht für Variablen. Variablen gelten nur, wenn das Coding über ihre Definition gelaufen ist. Schlimmer innerhalb einer Funktion (function) gilt sie nur dann wenn sie entweder übergeben wurde oder über die Anweisung global bekannt gegeben wurde:

    function aaa($var1, $var2) {
      global $var3;

    }

    $var3 ist hier eine globale Variable, die durch die Anweisung global importiert wird. Eine Konstante braucht hier nicht extra definiert zu werden. Sie sehen hier den Vorteil der Konstante in diesem Beispiel!

Vergegenwärtigt man sich dies, so ist es immer sinnvoll, echte Konstanten auch mit define zu definieren. Für andere hat man nun mehrere Möglichkeiten. Sie können die Variablen einzeln definieren, oder Sie definieren einen assoziativen Array, wo Sie alle diese quasi Konstanten definieren.

Gebrauch

Nehmen Sie an Sie haben eine Anweisungsfolge, die einen HTML-Header enthält. Je nach Seite wird sich dort der Ausdruck <title>Mein Seitentitel</title> ändern müssen.

Nun, definieren Sie doch eine Datei htmlheader.php! Innerhalb dieser definieren Sie den gesamten HTML-Header wie z.B.

<!DOCTYPE html PUBLIC „-//W3C//DTD XHTML ………“>
<html xmlns=“http://www.w3.org/1999/xhtml“ xml:lang=“de“ lang=“de“>
<head>
 <meta http-equiv=“Content-Type“ content=“text/html; charset=iso-8859-15″ />
 <title><?=$HTML[‚HTML_HEADER_TITLE‘]?></title>
….
….
….

Jetzt können Sie immer, wenn Sie eine neue Seite im Browser beginnen wollen, im PHP einen

$HTML[‚HTML_HEADER_TITLE‘] = ‚Das ist meine neue Seite“;
include „htmlheader.php“;

programmieren und schon wird der gesamte HTML-HEADER auf dem Browser ausgegeben. Wenn Sie vorher die Variable $HTML[‚HTML_HEADER_TITLE‘] mit dem Seitentiteltext bewertet haben, dann wird jeder Seitentitel variabel werden. Warum wurde nun hier ein Array $HTML[..] benutzt? Nun, das hat den Vorteil, dass alle in htmlheader.php eingesteute PHP-Variablen innerhalb $HTML gesammelt sind. $HTML wäre hier zwar eine Variable, doch wird sie gebraucht als quasi Konstante

Das Hauptprogramm, das sie Seite ausgeben soll, kann nun vor dem include „htmlheader.php“; alle $HTML[] – Werte setzen, die es ausgeben will. Damit sind die $HTML[]-Werte im eigentlichen Hauptprogramm gesammelt und könnten wie folgt aussehen:

$HTML[‚HTML_HEADER_TITLE‘] = „Mein Seitentitel“;
$HTML[‚HTML_HEADER_SIDE_CONTENT‘] = „Der Inhalt meiner Seite“;
$HTML[‚HTML_HEADER_ROBOT_INDEX‘] = „nofollow,noindex“;

quasi Konstanten

Diese oben aufgezeigten quasi Konstanten können nun sehr zur Übersichtlichkeit von PHP-Programmen dienen. Genauso wie Sie in der config.php Konstanten für die Verzeichnisse definiert haben, können sie dort auch leicht Vorabdefinitionen von quasi Konstanten machen, die Sie ggf. in den eigentlichen Programm-Skripten jeweils anders bewerten können. Da alle Programm-Skripte als erstes die Config.php einbinden, sind die Konstanten und die quasi Konstanten bekannt und können benutzt werden.

Tun Sie sich aber einen Gefallen: Unterscheiden sie die Konstanten- und quasi Konstanten aber durch eindeutige Schreibweisen im Programm:
Eingebürgert hat sich, dass man define-Konstanten immer in Großbuchstaben schreibt. Bei den quasi Konstanten sollen Sie assoziative Array nehmen, die sie irgendwie immer mit konstanten Namen Benutzen, wie bspw. $HTML, $SYSTEM … . Was man in anderen Programmen auch sehen kann (z.B. WordPress-Coding) ist die Benutzung des Zeichens ‚_‘ wie in $the_ oder $__Name!
Sie müssen sich eine Regel überlegen, wie sie beides benennen! Und auf alle Fälle, Sie müssen sich an Ihre Regel halten 🙂

Bei größeren PHP-Programmen sind diese Regeln, die Sie sich erstellen, enorm wichtig! Und ich kann Sie nur warnen, wenn Sie es nicht machen. Die Fehlersuche in den Programmen kann fürchterlich werden. So verwende ich die obige quasi Konstante $HTML[] als $HTML_[], oder ich stelle einer Variablen oder einer Funktion ein Firmenkürzel wie sbk voran, um zu zeigen, dass diese Variable keine Fremdvariable oder Fremdfunktion ist.

Gruß
Bernd Klüppelberg

Bisher gibt es keinen Kommentar. Schreiben Sie einen Kommentar!

Schreibe einen Kommentar