Servus,

weiter geht's mit PHP. Du weißt jetzt schon, wie man HTML mit PHP mischt und wie man mit PHP Ausgaben erzeugen kann, die dann im Browser angezeigt werden. Im heutigen Artikel widmen wir uns den Variablen. Variablen sind ein sehr wichtiges Thema, sie sind Bestandteil jeder Programmiersprache und von essentieller Bedeutung, wenn wir flexibel und dynamisch programmieren wollen.

<h2>Was sind Variablen?</h2>

Vielleicht hast du in der Schule schonmal mit Variablen zu tun gehabt. Das sind in den mathematischen Rechnungen diese Buchstaben die man auflösen muss (12 = x + 4  - finde x ). Nun, so kompliziert wird die Verwendung von Variablen bei PHP nicht, da kann ich dich beruhigen.

In PHP ist eine Variable eine Art Speicher oder Behälter für Werte. Sie ermöglichen uns eine flexible Programmierung, da wir Werte speichern und sie wieder abrufen und ändern können - oder auch löschen. Wenn eine Variable im Skript erstellt wird (deklariert wird), wird im Arbeitsspeicher ein bestimmter Bereich für diese Variable reserviert. In diesem Bereich kann dann der Wert der Variable abgelegt, abgerufen und geändert werden. Eine Variable ist so lange verfügbar wie das Skript läuft.

<h2>Wie verwende ich Variablen in PHP?</h2>

Variablen in PHP werden mit vorangestelltem Dollar-Zeichen $  erzeugt. Dem folgt anschließend der Name der Variable, zum Beispiel $Variable . Einer Variable kann dann ein Wert zugewiesen werden. Bevor ich jetzt großartig das Erklären anfange, lass es mich einfach an einem Beispiel zeigen:

<pre class="lang:php decode:true">&lt;?php # Eine Variable wird erzeugt # Man spricht hierbei von der Variablendeklaration $Variable1; # Anschließend weisen wir ihr einen Wert zu: $Variable1 = "Hallo Welt"; # Wir erzeugen noch eine Variable und weisen ihr direkt einen Wert zu # Hier erfolgt Deklaration und Initialisierung (=Wertzuweisung) in einem: $Variable2 = "Wello World"; # Variablen können dann auch ausgegeben werden: echo $Variable1; echo "&lt;br&gt;"; echo $Variable2; ?&gt;</pre>

Du siehst, das ist doch schonmal ganz einfach. Das Beispiel erzeugt folgende Ausgabe:

<pre class="lang:php highlight:0 decode:true">Hallo Welt Wello World</pre>

Zusammengefasst also folgende Schritte zur Verwendung von Variablen:

<ol> <li>Variable deklarieren Mit der Deklaration wird dem Skript bekannt gemacht, dass hier eine Variable erstellt wird. Und dass sie über einen bestimmten Namen angesprochen werden kann, um ihren Wert zu erhalten oder zu ändern.</li> <li>Wert zuweisen (=Initialisierung) Wenn eine Variable deklariert ist, kann ihr anschließend ein Wert zugewiesen werden. Im eben gezeigten Code-Beispiel weisen wir einen Wert vom Datentyp "String" zu, also eine Zeichenkette (in Anführungszeichen, wie du gelernt hast).</li> <li>Variablendeklaration und -Wertzuweisung in einem Man kann das wie du im Beispiel-Code siehst auch abkürzen, indem man einer Variable schon bei der Deklaration einen Wert zuweist. Geht schneller zu schreiben, wir brauchen nur 1 Zeile statt 2.</li> </ol>

Eine Variable kann wie gesagt einen beliebigen Namen haben. Dennoch gibt es gewisse Regeln, an die man sich halten muss:

<ul> <li>Eine Variable muss mit einem Buchstaben oder Unterstrich beginnen.</li> <li>Danach darfst du Unterstriche, Zahlen und Buchstaben verwenden.</li> <li>Variablennamen sind <em>Case Sensitive</em>, das bedeutet, dass Groß- und Kleinschreibung eine Rolle spielt. <span class="lang:php highlight:0 decode:true crayon-inline ">$Variable</span>  ist also nicht das gleiche wie <span class="lang:php highlight:0 decode:true crayon-inline ">$variable</span> .</li> </ul>

Eine Variable kann übrigens nicht nur einen statischen Wert sondern auch das Ergebnis eines Ausdrucks erhalten:

<pre class="lang:php decode:true ">&lt;?php $Ergebnis = (3 + 4) * 2; echo $Ergebnis; ?&gt;</pre>

Die Ausgabe ist simpel: 14 .

Hinweis zur Ausgabe mit echo Achte darauf, wie du Variablen ausgibst. Es gibt mehrere Möglichkeiten:

<ul> <li>So wie sie sind, also <span class="lang:php decode:true crayon-inline ">echo $Variable;</span>  wie wir es auch auch im obigen Beispiel gemacht haben.</li> <li>In doppelten Anführungszeichen, also <span class="lang:php decode:true crayon-inline">echo "$Variable";</span></li> <li>In einfachen Anführungszeichen, also <span class="lang:php decode:true crayon-inline ">echo '$Variable';</span>  - und hier gibt es eine Besonderheit, denn bei der Ausgabe in einfachen Anführungszeichen wird der Wert der Variable nicht aufgelöst sondern nur als Text ausgegeben.</li> </ul>

Zum Verständnis das folgende Beispiel:

<pre class="lang:php decode:true ">&lt;?php $Variable = "Hallo Welt"; echo $Variable; echo "&lt;br&gt;"; echo "$Variable"; echo "&lt;br&gt;"; echo '$Variable'; ?&gt;</pre>

erzeugt die Ausgabe:

<pre class="lang:php highlight:0 decode:true ">Hallo Welt Hallo Welt $Variable</pre>

Variablen und Strings verketten Im letzten Artikel hast du gelernt, dass man Strings und Ausdrücke mit dem Punkt . verbinden kann. Nun, hier ändert sich nichts, das gleiche funktioniert genau so auch mit Variablen:

<pre class="lang:php decode:true ">&lt;?php $Variable = "Welt"; echo "Hallo " . $Variable; ?&gt;</pre>

Die Ausgabe ist Hallo Welt .

<h2>Datentypen</h2>

<h3>Was sind Datentypen?</h3>

Ohne dass du es wahrscheinlich weißt, haben wir bereits mit 2 Datentypen gearbeitet - String und Integer. Der Datentyp gibt den Typ einer Variable an und somit, was für eine Art von Wert sie speichert (und ganz nebenbei auch, wieviel Platz im Speicher dafür reserviert wird). Sehen wir uns die vier sogenannten skalaren Typen (skalar bedeutet vereinfacht ausgedrückt, dass Variablen skalaren Typs nur jeweils einen Wert speichern können) an.

String Eine Variable vom Typ String enthält Text, wird also in Anführungszeichen gesetzt.

Integer Enthält Ganzzahlen-Werte, also Zahlen wie 1, 2, 3, 900, -14, 94882, -316 und so weiter. Das heißt ganze Zahlen, keine Zahlen mit Nachkommastellen.

Float (auch Dezimalzahl oder Fließkommazahl gekannt) Enthält Fließkommazahlen, also Zahlen wie 1.5 oder 16.0 oder -9.4 und so weiter. Hier wird übrigens die englische Schreibweise verwendet, das Dezimaltrennzeichen ist ein Punkt und nicht wie im deutschen ein Komma. Variablen vom Typ float oder double sind bei PHP dasselbe.

Boolean Eine Variable vom Typ Boolean kann nur einen von zwei möglichen Zuständen annehmen, nämlich true oder false (also WAHR oder FALSCH, JA oder NEIN, 1 oder 0 ... du verstehst schon).

<h3>Wie kann ich den Datentyp einer Variable festlegen?</h3>

PHP legt den Datentyp einer Variable automatisch anhand des übergebenen Werts fest. Es gibt da eine nette Funktion namens gettype(...) , und die zeigt uns wenn wir ihr eine Variable als Argument übergeben, von welchem Typ diese ist:

<pre class="lang:php decode:true">&lt;?php $Variable_String = "Das ist ein Text"; echo gettype($Variable_String) . "&lt;br&gt;"; $Variable_Integer = 12; echo gettype($Variable_Integer) . "&lt;br&gt;"; $Variable_Float = 1.5; echo gettype($Variable_Float) . "&lt;br&gt;"; $Variable_Boolean = true; echo gettype($Variable_Boolean) . "&lt;br&gt;"; echo "&lt;hr&gt;"; /** * Randnotiz: * Wir müssen eigentlich keine Variablen deklarieren nur um das zu testen. * Es reicht, wenn wir den Wert direkt übergeben. */ echo gettype("Das ist ein Text") . "&lt;br&gt;"; echo gettype(12) . "&lt;br&gt;"; echo gettype(1.5) . "&lt;br&gt;"; echo gettype(true) . "&lt;br&gt;"; ?&gt;</pre>

<h3>Und wofür brauche ich Datentypen?</h3>

In erster Linie, um sauber zu programmieren. In anderen Programmiersprachen gibt man den Datentyp einer Variable bei der Deklaration an - bei PHP ist das nicht der Fall. Ich erwähnte schonmal, dass PHP eine typenschwache Sprache ist - und damit ist eben dies gemeint. Man kommt so in Versuchung, unsauber zu programmieren. Ich zeige dir an den entsprechenden Stellen die Fallstricke auf und auch, wie man es richtig macht.

Je nach Datentyp enthält eine Variable Werte unterschiedlichen Typs und dementsprechend andere Funktionen und Operationen können mit den Werten durchgeführt werden. Du wirst sicher nicht vorhaben, in einer Zahl nach einer bestimmten Textstelle zu suchen - ebenso wenig wirst du vermutlich versuchen, zwei Texte zu multiplizieren oder den Text "Hallo" durch "Welt" zu dividieren. Ist ja Blödsinn.

<h2>Datentyp-spezifische Funktionen nutzen</h2>

Nun möchte ich dir zeigen, welche verschiedenen, von PHP bereits vordefinierten Funktionen es so gibt und für welchen Datentyp sie am besten geeignet sind.

<h3>String-Funktionen</h3>

Mit Text lässt sich allerhand anstellen. Hier einige Funktionen die sich auf Texte anwenden lassen:

<pre class="lang:php decode:true">&lt;?php # Eine Variable mit Text deklarieren $Text = "Das ist ein einfacher Text. Hallo Welt!"; echo "&lt;b&gt;Der Ausgangstext:&lt;/b&gt;&lt;br&gt;" . $Text; echo "&lt;hr&gt;"; // Trennlinie # Zeichenanzahl eines Strings darstellen echo "Der Text besteht aus " . strlen($Text) . " Zeichen.&lt;br&gt;"; # Ganzen Text in Kleinbuchstaben darstellen echo "Klein geschrieben: " . strtolower($Text) . "&lt;br&gt;"; # Ganzen Text in Großbuchstaben darstellen echo "Gross geschrieben: " . strtoupper($Text) . "&lt;br&gt;"; # Die ersten 5 Buchstaben des Textes # Die Funktion "substr" erwartet 3 Argumente: # 1) Der Text # 2) Stelle ab der begonnen werden soll (der Index) # 3) Anzahl an Zeichen die geholt werden sollen echo "Die ersten 8 Buchstaben: \"" . substr($Text, 0, 5) . "\"&lt;br&gt;"; # WICHTIG ist, dass der Index bei der Programmierung immer bei 0 beginnt. # Siehst du auch an folgendem Beispiel, wenn wir uns das erste Zeichen ausgeben lassen. # Das bedeutet wir suchen ab Zeichenindex 0 des Textes und geben die gewünschten Anzahl Zeichen ab dort zurück, hier "1": echo "Der erste Buchstabe: " . substr($Text, 0, 1) . "&lt;br&gt;"; # Text um noch mehr Text erweitern $Text = $Text . " Hier ist neuer Text."; echo "Text nach Erweiterung: " . $Text . "&lt;br&gt;"; # Text "verdoppeln": $Text = $Text . $Text; echo "Verdoppelter Text: " . $Text . "&lt;br&gt;"; echo "&lt;br&gt;&lt;br&gt;"; echo "&lt;b&gt;Der neue Ausgangstext:&lt;/b&gt;&lt;br&gt;"; # Neue Variable "Text2" erstellen $Text2 = "Hallo"; # Und direkt erweitern, diesmal mit der kurzen Schreibweise $Text2 .= " Welt!"; echo "Text2: " . $Text2 . "&lt;br&gt;"; echo "&lt;hr&gt;"; # Text beliebig oft wiederholen (hier 4x) $anzahl_wiederholungen = 4; echo $anzahl_wiederholungen . "x wiederholen: " . str_repeat($Text2, $anzahl_wiederholungen) . "&lt;br&gt;"; # Oder nur 2x echo "2x wiederholen: " . str_repeat($Text2, 2) . "&lt;br&gt;"; # Text rückwärts anzeigen: echo "Anders rum: " . strrev($Text2) . "&lt;br&gt;"; ?&gt;</pre>

Das sind nur einige String-Funktionen, es gibt noch weitere, zum Beispiel um Hashes zu erzeugen oder einen String nach Base64 zu kodieren, RegEx und noch vieles mehr. Eine ganze Liste kannst du auf php.net ansehen.

Schauen wir uns aber kurz substr an, die Funktion wird relativ oft gebraucht. Wie du schon in den Kommentaren im Code lesen kannst, gibt uns diese Funktion einen Teil eines Strings zurück. Wir übergeben zuerst den String, danach der Index ab dem wir den Bereich extrahieren möchten und zum Schluss die Länge die ab dem angegebenen Index herausgeholt wird. Jedes Zeichen in einem String ist ja an einem bestimmten Index, das heißt der erste Buchstabe ist an Index 0, der zweite Buchstabe ist an Index 1, der dritte Buchstabe an Index 2 und so weiter.

Eine kleine Grafik veranschaulicht das:

[caption id="attachment_2933" align="alignnone" width="300"]Beispiel mit substr Beispiel mit substr[/caption]

<h3>Zahlen</h3>

Wie schon gezeigt kann man mit Zahlen (Integer und Float) mathematische Operationen durchführen. Einige praktische Funktionen zeige ich dir in diesem Code:

<pre class="lang:php decode:true ">&lt;?php # Zahlen runden echo "Runde 17,98732 auf 2 Stellen: " . round(17.98732, 2) . "&lt;br&gt;"; # Zahlen im deutschen Format ausgeben # Funktion "number_format(...)" erwartet 4 Argumente: # 1) Die zu formatierende Zahl # 2) Anzahl an Kommastellen # 3) Dezimal-Zeichen # 4) Tausender-Zeichen # Die Funktion eignet sich bestens, um zum Beispiel Preise darzustellen, schau: $zahl1 = 4917.87721; echo "Preis (" . $zahl1 . "): " . number_format($zahl1, 2, ',', '.') . " &amp;euro;&lt;br&gt;"; # Funktion "ceil" rundet eine Zahl auf die nächste ganze Zahl auf: $zahl2 = 1.3; echo "Runde " . $zahl2 . " auf ganze Zahl: " . ceil($zahl2) . "&lt;br&gt;"; # Funktion "floor" tut das Gegenteil von "ceil", es rundet ab. $zahl3 = 7.99; echo "Runde " . $zahl3 . " ab: " . floor($zahl3) . "&lt;br&gt;"; # Dezimal in Binär umrechnen echo "5 ist in binär: " . decbin(5) . "&lt;br&gt;"; # Im Umkehrschluss: echo "Binär 101 ist in dezimal: " . bindec(101) . "&lt;br&gt;"; # Exponentialfunktion echo "Exponential 4: " . exp(4) . "&lt;br&gt;"; # Logarithmus echo "Logarithmus 16.1: " . log(16.1) . "&lt;br&gt;"; # PI ausgeben echo "PI=" . pi() . "&lt;br&gt;"; # Quadratwurzel einer Zahl berechnen echo "Quadratwurzel aus 81: " . sqrt(81) . "&lt;br&gt;"; ?&gt;</pre>

Auch hier gibt es natürlich noch weitaus mehr Funktionen für alles mögliche wie beisp. Sinus, Kosinus, Umrechnung ins Hexadezimalsystem, Tangens, Absolutwert, bla bla bla und so weiter - eine Liste aller mathematischen Funktionen ebenfalls wieder auf php.net.

Zufallszahlen Wo wir grade bei Zahlen sind kann ich dir gleich noch zeigen, wie sich zufällig welche erzeugen lassen. Mit der Funktion rand() können Zufallszahlen generiert werden - man gibt einen Bereichan, in dem die zu generierende Zufallszahl erzeugt werden soll. Hier einige Beispiele was man damit unter anderem anstellen kann:

<pre class="lang:php decode:true ">&lt;?php # Zufallszahl generieren zwischen 0 und 10 echo "Zufallszahl zwischen 0 und 10: " . rand(0, 10) . "&lt;br&gt;"; # Mehrere Zufallszahlen zwischen 0 und 9000: echo "Weitere Zufallszahlen zwischen 0 und 9000:&lt;br&gt;"; echo rand(0, 9000) . "&lt;br&gt;"; echo rand(0, 9000) . "&lt;br&gt;"; echo rand(0, 9000) . "&lt;br&gt;"; echo rand(0, 9000) . "&lt;br&gt;"; echo rand(0, 9000) . "&lt;br&gt;"; # Man kann damit z.B. zufällige Berechnungen anstellen, hier ein Beispiel mit Addition: $zahl1 = rand(0, 10); $zahl2 = rand(0, 10); $zahl3 = $zahl1 + $zahl2; echo $zahl1 . " + " . $zahl2 . " = " . $zahl3 . "&lt;br&gt;"; ?&gt;</pre>

Funktion rand() auf php.net nachschlagen: http://php.net/manual/de/function.rand.php.

Noch besser ist es übrigens, die Funktion mt_rand()  zu verwenden, die "bessere" Zufallszahlen erzeugt, außerdem ist der Algorithmus dahinter ist 4x schneller als bei rand(). Verwenden tut man sie aber genauso, also zum Beispiel echo mt_rand(0, 10); . Mehr dazu: http://php.net/manual/de/function.mt-rand.php.

<h3>Boolean-Funktionen</h3>

Tja, hierzu habe ich gerade nichts für dich. Interessant werden Boolean-Variablen, wenn wir mit Kontrollstrukturen arbeiten (WENN ... DANN ...).

<h2>FAQ</h2>

Was sind eigentlich diese "Funktionen" von denen hier immer die Rede ist? Ja, gute Frage. Ich geb zu ich greife damit ein wenig vor - das Thema Funktionen wird in einem der nächsten Artikel ausführlich behandelt und ich zeige dir, wie man eigene Funktionen schreibt. Funktionen sind eine kleine Ansammlung von Code, die eine bestimmte Aktion ausführen bzw. Aufgabe erledigt. Weiter oben hast du ja bereits viele Funktionen kennengelernt. Du sprichst eine Funktion über ihren Namen an und in den meisten Fällen übergibst du beim Aufruf noch einige Werte. So wie du das zum Beispiel bei den Zufallszahlen gesehen hast. Gut, du kannst z.B. rand() auch ohne Argumente aufrufen, aber dann spuckt dir die Funktion einfach Zahlen von 0 bis irgendwas (und das entscheidet PHP in dem Fall selbst) aus. Viel besser ist es aber, wenn du der Funktion mitteilen kannst, dass du gern beeinflussen möchtest, in welchem Zahlenbereich die Zufallszahlen generiert werden sollen. Hierfür können an die Funktion optional 2 Argumente (Werte) übergeben werden. Die Funktion empfängt deine übergebenen Werte, verarbeitet sie und gibt anschließend im Regelfall wieder einen Wert zurück (den du dann einer Variable zuweisen oder direkt ausgeben kannst). Wenn du dir trotzdem nichts genaues drunter vorstellen kannst, nicht schlimm. Wenn ich dir bald zeige wie du eigene Funktionen schreibst, wirst du das alles viel besser verstehen, ist keine schwierige Sache ;)

<h2>Fazit</h2>

Variablen sind ein äußerst wichtiges Thema und mit jedem Schritt den wir gehen und mit jedem Code den du lernt, kannst du mit all den Sachen mehr anfangen. Je mehr du lernst desto besser wird dir verständlich, welchen Nutzen Variablen haben. Vieles in der Programmierung wird ja erst durch Kombination mit anderen Sprachkonstrukten und Themen sinnvoll. Hätten wir beispielsweise zuerst mit Variablen angefangen und ich hätte dir erst hinterher gezeigt, wie man mit echo Ausgaben erzeugt, dann hättest du dich beim Lesen sicher ständig gefragt, wofür Variablen gut sein sollen, wenn man davon im Browser nichts sieht. Oft ist es so, dass man manche Dinge nur zur Hälfte versteht - vielleicht geht es dir gerade mit Variablen so. Aber ich kann dir versichern das ist kein Grund zur Sorge, du hängst jetzt nicht hinterher oder so. Ich empfehle dir, dass wenn du jetzt die nächsten paar zukünftigen Artikel gelesen hast, einfach mal wieder hierher zurückspringst und diesen Artikel nochmal liest. Das wird dir beim Lesen einen Aha!-Effekt geben. Diese Momente sind im Leben eines Programmierers etwas besonderes. Du wirst es erleben ;)

Grüße Marius