Websiteentwicklung: PHP: Praktische Einführung: Variablen

Nun weißt du zwar bereits, was Anweisungen in PHP sind und wie du Funktionen ausführst, bisher konntest du allerdings noch nichts hilfreiches machen. Das wollen wir jetzt ändern: Wir wollen dem Besucher den aktuellen Wochentag, sowie den Wochentag in einem Jahr anzeigen.

Dabei halten wir uns an das EVA-Prinzip und versuchen, den verarbeitenden Code von der Ausgabe zu trennen. Zunächst das Ausgangsskript:

<?php

setlocale(LC_ALL, 'de_DE@euro', 'de_DE', 'deu_deu');

?>

<html>
  <head>
    <title>Zeitfunktionen</title>
  </head>
  <body>
    <p>Heute ist <?php echo strftime('%A'); ?>.</p>
    <p>In einem Jahr ist <?php echo strftime('%A', strtotime('+1 year')); ?>.</p>
  </body>
</html>

setlocale sorgt dafür, dass die richtige Sprache für die Anzeige des Wochentages verwendet wird. Das erste Argument gibt an, für welchen Bereich (z.B. Währungs- oder Zeitfunktionen) die Region gesetzt werden soll. Wir haben dafür eine Konstante verwendet - dazu später mehr. Die restlichen Argumente sind verschiedene Möglichkeiten, "deutsch" als gewünschte Sprache einzustellen. Wenn die erste Schreibweise dem System nicht bekannt ist, wird die zweite probiert, usw.

strftime gibt eine formatierte Zeichenkette zurück. Das erste Argument ist das gewünschte Format ("%A" steht für "Wochentag, ausgeschrieben"), das zweite ein Timestamp. Da dieser optional ist, haben wir ihn weggelassen. Es wird dann automatisch die aktuelle Zeit des Servers verwendet. Weitere Formate findest du in der Dokumentation von strftime im PHP-Handbuch.

strtotime wandelt eine Zeichenkette wieder in einen Timestamp um. Mit strtotime sind auch relative Angaben möglich, wie "yesterday 14:00", "4 months 6 days ago" oder, wie hier verwendet, "+1 year". Diesen Timestamp übergeben wir dann wiederum der Funktion strftime, die uns den Wochentag dieses Zeitpunktes zurück gibt.

Wir können den unteren Teil jedoch noch übersichtlicher gestalten, indem wir die Ergebnisse der beiden strftime-Aufrufe in Variablen speichern.

Was sind Variablen? Bearbeiten

Variablen sind wie Behälter. Sie speichern einen Wert ab, und man kann diesen Wert anschließend an Funktionen weiterreichen oder Operatoren verwenden. Variablen sind unerlässlich, wenn du das Ergebnis von Funktionen zur späteren Verwendung im Skript festhalten willst.

Variablen beginnen in PHP immer mit dem Dollarzeichen ($), gefolgt vom Namen der Variable. Der Name darf nur Buchstaben, Ziffern und Unterstriche enthalten; das erste Zeichen darf dabei keine Zahl sein.

Hinweis

Anders als in anderen Programmiersprachen muss man in PHP eine Variable vor der Verwendung nicht definieren. Allerdings wird PHP auf der höchsten error_reporting-Stufe einen Hinweis ausgeben, wenn man versucht, eine nicht vorhandene Variable an eine Funktion oder Kontrollstruktur zu übergeben.

Variablen zuweisen Bearbeiten

Du kannst einer Variable einen Wert mit dem Zuweisungsoperator = (einfaches Gleichheitszeichen) zuweisen. Dabei wird stets der linken Variable der rechte Wert zugewiesen:

<?php

$a = 5; // $a enthält jetzt 5
$b = 'Hallo Welt!'; // $b enthält jetzt 'Hallo Welt!'
$b = $a; // Der Wert von $b wurde durch 5 ersetzt, $a bleibt bei 5
$b = $a = 'Hallo Welt!'; /* Zunächst wird $a 'Hallo Welt!' zugewiesen, anschließend $b
                            der Wert von $a, also auch 'Hallo Welt!' */

echo $b; // Gibt 'Hallo Welt!' aus

'Test' = $b; // Das wird einen Fehler erzeugen, da einem konstanten Wert nichts zugewiesen werden kann
?>

PHP beachtet bei Variablen die Groß- und Kleinschreibung: $test bezeichnet eine andere Variable als $TEST. Es ist eine gängige Konvention, Variablennamen immer klein zu schreiben.

Wenn einer Variable der Wert einer anderen Variable zugewiesen wird, so erhält diese eine Kopie des Wertes. Die beiden Variablen bleiben unabhängig voneinander. Deshalb ist es wichtig, dass du dich von der Vorstellung des = als Gleichheitszeichen löst. In PHP bedeutet es schlicht: "Weise der Variable links von mir den Wert rechts von mir zu". Es gibt allerdings eine Möglichkeit, Variablen als beständigen Verweis auf eine andere Variable zu verwenden (sog. Referenzen). Referenzen können, richtig angewendet, Problemstellungen vereinfachen, sind zu Beginn jedoch nicht leicht zu verstehen. Mehr dazu findest du im Kapitel Referenzen.

HTTP ist zustandslos Bearbeiten

Wie eingangs erwähnt, haben PHP-Skripte in der Web-Welt meist nur eine Lebensdauer von einigen wenigen Sekunden. Sobald ein Skript beendet wurde, sind die Variablen weg. Folgendes Skript wird niemals etwas ausgeben, egal, wie oft du es aufrufst:

<?php

echo $text;

$text = 'Ich bin unsichtbar';

?>

Solltest du einmal etwas für eine längere Dauer speichern wollen, könntest du den Wert in eine Datenbank schreiben, eine Datei erstellen, im Arbeitsspeicher oder in der Benutzersitzung ablegen.

Anwendung Bearbeiten

Wenden wir nun das Gelernte an:

<?php

setlocale(LC_ALL, 'de_DE@euro', 'de_DE', 'deu_deu');

$day_today = strftime('%A');
$timestamp_in_1_year = strtotime('+1 year'); /* diese Zwischenspeicherung ist nicht unbedingt notwendig, 
                                                  erleichtert aber den Überblick */
$day_in_1_year = strftime('%A', $timestamp_in_1_year);

?>

<html>
  <head>
    <title>Zeitfunktionen</title>
  </head>
  <body>
    <p>Heute ist <?php echo $day_today; ?>.</p>
    <p>In einem Jahr ist <?php echo $day_in_1_year; ?>.</p>
  </body>
</html>

Ohne es zu wissen, hast du damit bereits eine wichtige Technik angewendet: Das Templating, welches dir im nächsten Kapitel vorgestellt wird.

Konstanten Bearbeiten

Es gibt noch besondere "Container" für Werte: Die Konstanten. Vielleicht sind dir Konstanten bereits aus der Mathematik bekannt (Pi oder die Eulersche Zahl). Wie der Name bereits verrät, sind diese, einmal festgelegt, unabänderlich. Sie werden mit der Funktion define definiert:

<?php

define('APFEL',  1);
define('BANANE', 2);
define('PFIRSICH', 1);

define('APFEL', 1); // Das wird nicht funktionieren, da APFEL bereits definiert wurde

?>
Hinweis

Da PHP bei Konstanten in der Regel ebenso auf die Groß- und Kleinschreibung achtet, ist es eine Konvention, alle Konstanten groß zu schreiben.

Konstanten können nur einfache Werte enthalten (boolean, string, integer, float), also keine Arrays oder Objekte. Was das genau bedeutet, wirst du später in dieser Einführung (im Kapitel Typen und Operatoren) erfahren.

Ihren Wert rufst du ab, indem du einfach ihren Namen schreibst (ohne $!):

<?php

define('TRAUBE', 3);

echo 'TRAUBE hat den Wert ';
echo TRAUBE;

?>

Sinnvoll sind Konstanten vor allem als Argumente von Funktionen. Die Funktion trigger_error, die es dir ermöglicht, einen PHP-Fehler zu erzeugen, erwartet als zweites, optionales Argument den Typ des Fehlers:

<?php

trigger_error('Das wirft einen Hinweis.', E_USER_NOTICE);
trigger_error('Das wird eine Warnung erzeugen.', E_USER_WARNING);
trigger_error('Hier bricht das Skript ab.', E_USER_ERROR);

?>

Ausgabe (ähnlich):

Notice: Das wirft einen Hinweis. in C:\xampp\htdocs\tutorial\test.php on line 3

Warning: Das wird eine Warnung erzeugen. in C:\xampp\htdocs\tutorial\test.php on line 4

Fatal error: Hier bricht das Skript ab. in C:\xampp\htdocs\tutorial\test.php on line 5

Hinter den Konstanten verbergen sich Zahlen. E_USER_NOTICE hat z.B. den Wert 1024, du hättest also auch einfach 1024 schreiben können. Dagegen sprechen zwei Dinge:

  • Konstanten haben einen Namen. Du musst dir nicht merken, dass du für einen Hinweis die Zahl 1024 brauchst.
  • Bei einer Änderung des Werts muss das Script nur an einer einzigen Stelle geändert werden. Die PHP-Entwickler könnten eines Tages zu der Auffassung gelangen, dass 32768 viel besser für E_USER_NOTICE ist.
Den Themenbereich Variablen und Konstanten vertiefen...