öffentlich
Redaktion Druckversion

PHP lernen (1): Einführung, Installation und erste Schritte

Datentypen

Jede Variable verfügt über einen Datentypen. Datentypen bestimmen sozusagen das Format einer Variablen. PHP kennt folgende skalare Datentypen:

  • Boolean (Wahrheitswerte true, false)

  • Integer (Ganzzahl)

  • Float (Fließkommazahl)

  • String (Zeichenketten)

In den folgenden Teilen werden wir über den Datentypen Array sprechen. Im Gegensatz zu den genannten skalaren Datentypen sind Arrays Listen von Werten. Ein Array kann also viele Werte enthalten. Zunächst konzentrieren wir uns nur auf die skalaren Variablen.

Den Datentypen einer Variablen müssen Sie in PHP nicht explizit definieren. Im oben angegebenen Beispiel ist $test vom Datentyp string (Zeichenkette), $zahl vom Typ double (Fließkommazahl) und $i vom Typ integer (Ganzzahl). Diesen Datentyp erkennt PHP von sich aus bei der ersten Zuweisung von Werten. Ändert sich der Datentyp, nimmt PHP automatisch eine Typenumwandlung vor:

<?php
$wort = "5 Stück";
print $wort;    // Ausgabe: 5 Stück
$multipliziert = $wort * 3;
print $multipliziert;    // Ausgabe: 15
?>

Bei der ersten Ausgabe in der zweiten Zeile ist $wort vom Typ string. Nach der Multiplikation in Zeile 3 wandelt PHP die Variable in einen integer um. Die Variable $multipliziert enthält nun nur noch die Zahl 15. Sie sollten jedoch immer im Blick haben, welchen Datentyp eine Variable hat und sich nicht zu sehr auf die automatische Typumwandlung von PHP verlassen, da sich hierin eine schwer aufzulösende Fehlerquelle verbirgt. Wenn Sie statt 5 Stück nämlich Stück: 5 verwenden, wird das Beispiel nicht wie erwartet funktionieren, da PHP nur dann automatisch aus einer Zeichenkette eine Zahl ausliest, wenn die Zeichenkette mit einer Zahl beginnt. In diesem Fall jedoch beginnt die Zeichenkette mit Buchstaben, so dass PHP den Integerwert auf 0 setzt. Die Multiplikation mit 3 ergibt in diesem Fall nicht 15, sondern 0.

<?php
$wort = "Stück: 5";
print $wort;    // Ausgabe: Stück: 5
$multipliziert = $wort * 3;
print $multipliziert;    // Ausgabe: 0!
?>

Hat eine Variable also einmal in Ihrem Skript einen Typ integer, sollte diese Variable auch die gesamte Laufzeit über vom Typ integer bleiben.

In der Regel werden Sie erst einmal nicht viel mit Datentypen zu tun haben. Den Datentypen explizit abfragen können Sie mithilfe der PHP-Funktion gettype($variable).

<?php
$wort = "5 Stück";
print gettype($wort);    // Ausgabe: string
print "<br>";
print $wort;    // Ausgabe: 5 Stück
print "<br>";
$multipliziert = $wort * 3;
print gettype($multipliziert);    // Ausgabe: integer
print "<br>";
print $multipliziert;    // Ausgabe: 15
?>

Zur Anwendung von PHP-Funktionen wie hier gettype() kommen wir später noch ausführlich zurück.

Zahlen: integer und float

  • integer (Ganzzahl):

    $a = 1234;
    $b = -456;

Der Datentyp integer speichert ganze Zahlen ohne Nachkommastellen.

  • double (Fließkommazahl):

    $a = 12.34;
    $a = -5.67;

Der Datentyp double speichert Zahlen mit Nachkommastellen. Achten Sie auf den Punkt als Dezimaltrennzeichen. Im Amerikanischen werden Dezimalzahlen mit Punkt und nicht - wie im Deutschen üblich - mit Komma geschrieben. Verwenden Sie Zahlen mit Komma als Dezimaltrennzeichen, erkennt PHP diese Zahlen als Zeichenketten und wird nicht korrekt rechnen. Auch Ganzzahlen können vom Typ double sein, Ganzzahlen sind ein Teil der Fließkommazahlen.

PHP verfügt über die arithmetischen Operatoren (+ - * /), die Sie auch aus der Mathematik kennen. Dabei wird zeilenweise gelesen und gerechnet, also von links nach rechts. Die mathematische Grundregel "Punktrechnung vor Strichrechnung" wird dabei angewendet. Die Reihenfolge der Berechnung kann wie in der Mathematik durch Klammern beeinflusst werden:

<?php
$a = 4;
$b = 16;

$c = $a + $b / 5; 
print $c;   # ergibt 7.2

$d = ($a + $b) / 5; 
print $d;   # ergibt 4
?>

Die Ergebnisse, die in $c und $d gespeichert sind, sind wie erwartet nicht identisch. $c wird automatisch zur Fließkommazahl vom Typ double, $d bleibt vom Typ integer.

Um eine Fliesskommazahl auf maximal zwei Nachkommastellen zu runden, gibt es die Funktion round(). Die Funktion wird im PHP-Manual im Kapitel LXXVII. Mathematische Funktionen beschrieben:

double round ( double val [, int precision] )

Wenn Sie die Funktion aufrufen, führt diese im Compiler vordefinierte Aktionen mit den Werten aus, die ihr in Klammern übergeben wurden. Das Ergebnis dieser Aktionen wird Rückgabewert genannt. Der Datentyp des Rückgabewertes steht immer vor dem Namen der PHP-Funktion. Der Rückgabewert, das Ergebnis, der Funktion round ist vom Typ double, also eine Fließkommazahl. Der Name der Funktion lautet round. In Klammern dahinter stehen Parameter, die die Funktion akzeptiert. Übergeben wird als erster Parameter der Wert, der gerundet werden soll: double val. Dabei steht wieder der Datentyp links, hier also double, und rechts die Bezeichnung des Parameters, die in der Beschreibung des Handbuchs auch noch einmal erläutert werden. Die Bezeichnung val (von value) ist hier der Wert, der gerundet werden soll. Der 2. Parameter steht bei dieser Funktionsdefinition in eckigen Klammern. Die eckigen Klammern zeigen an, dass der 2. Parameter optional ist. Sie können ihn angeben, müssen es aber nicht. Als zweiter Parameter kann angegeben werden, auf wie viele Stellen hinter dem Komma gerundet werden soll. Angegeben wird ein integer-Wert, also eine Ganzzahl:

<?php
$dezimal = 3.4567;
$gerundet = round($dezimal, 2);
print $gerundet;     # Ausgabe: 3.46
?>

Wird der 2. Parameter nicht angegeben, wird auf die Ganzzahl gerundet:

<?php
$dezimal = 3.4567;
$gerundet = round($dezimal);
print $gerundet;     # Ausgabe: 3
?>

Weitere mathematische Funktionen finden Sie im PHP-Manual. Zur Anwendung von PHP-Funktionen und zur Benutzung des Handbuchs kommen wir im Abschnitt Zeichenkettenverarbeitung ausführlich zurück. Im Moment wollen wir nur noch die Funktion number_format() zum Formatieren von Fliesskommazahlen betrachten.

Insbesondere bei Berechnungen mit Geldwerten sind zwei Nachkommastellen erwünscht, auch wenn sie nicht nötig wären, zum Beispiel EUR 9.50. Die Funktion round() würde aber nur 9.5 ausgeben. Da der Wert 9.5 vom Typ double wäre, wäre die 0 als 2. Nachkommastelle irrelevant. Um also nun 2 Nachkommastellen zu erzwingen, gibt es die Funktion number_format(), die gleichzeitig den Punkt durch ein Komma ersetzen und Tausenderpunkte setzen kann. Im Handbuch steht:

string number_format (
float number [, int decimals [, string dec_point, string thousands_sep]]
)

Hierbei sei noch einmal daran erinnert, dass in eckigen Klammern stehende Parameter optional sind. Diese Funktion akzeptiert einen, zwei oder vier Parameter, aber nicht drei! Wir sehen hier die Datentypen string für den Rückgabewert, die formatierte Zahl. Beachten Sie, dass die formatierte Zahl von PHP nicht mehr als Zahl, sondern als Zeichenkette betrachtet wird. Mit dieser Zahl wird PHP nicht mehr richtig rechnen können. Der erste Parameter float number ist vom Datentypen float für die Fließkommazahl, die formatiert werden soll. Die darf natürlich auch eine Ganzzahl sein. Ganzzahlen sind ein Teil der Fließkommazahlen.

Wird nur number übergeben, so wird diese Zahl ohne Nachkommastellen, aber im amerikanischen Format mit durch Komma getrennten Tausendergruppen ausgegeben:

print number_format(1234567);
// Ausgabe 1,234,567

Übergeben Sie eine Fließkommazahl als einzigen Parameter, wird auf eine Ganzzahl gerundet. Dabei wird das Komma als amerikanisches Trennzeichen für die Tausender automatisch gesetzt:

print number_format(12345.67);
// Ausgabe 12,346

Der optionale zweite Parameter int decimals gibt die Anzahl der auszugebenden Nachkommastellen an. Akzeptiert wird eine Ganzzahl vom Typ integer. Die Nachkommastellen werden durch einen Punkt getrennt ausgegeben.

print number_format(1234567.564, 2);
// Ausgabe 1,234,567.56
print number_format(1.234567, 3);
// Ausgabe 1.235
print number_format(1234, 2);
// Ausgabe 1,234.00

Im Deutschen werden die Kommata und Punkte genau umgekehrt gesetzt, also Punkte für die Tausendertrennung und Kommata für die Dezimalstellen. Dazu werden die beiden letzten Parameter verwendet. Mithilfe der weiteren Parameter dec_point und thousands_sep können andere Trennzeichen für Tausendergruppen und Nachkommastellen festgelegt werden. Diese beiden Parameter können nur zusammen angegeben werden:

print number_format(1234567.564, 2, ",", ".");
// Ausgabe 1.234.567,56

print number_format(1234567.5, 2, ",", ".");
// Ausgabe 1.234.567,50

Beachten Sie, dass der Rückgabewert eine Zeichenkette ist. Wenn Sie mit diesem Rückgabewert weiterrechnen, wird es zu Fehlern kommen. Die Funktion eignet sich hervorragend für die Ausgabe von Geldwerten. Wandelt Sie das Format jedoch immer erst dann um, wenn das Programm alle notwendigen Rechnungen bereits durchgeführt hat.

Zeichenketten

Zeichenketten können im Grunde alles enthalten: Buchstaben, Wörter, Sätze, auch Zahlen, HTML-Code, JavaScript-Code, SQL-Anweisungen für die Kommunikation mit einer SQL-Datenbank, PHP-Befehle usw. Der Speicherraum ist nicht begrenzt.

  • string (Zeichenkette):

    $variable = "Hallo Welt!";

Zeichenketten müssen von doppelten oder einfachen Anführungszeichen eingeklammert werden.

$begruessung = "Hallo";
$wer = 'Welt';

Mehrere Zeichenketten werden durch den Punktoperator miteinander verknüpft:

$test = $begruessung . $wer;
print $test;           // Ausgabe: HalloWelt!

Die Leerzeichen vor und nach dem Punktoperator dienen lediglich der Lesbarkeit. Sie können sie auch weglassen.

$test = $begruessung.$wer;
print $test;           // Ausgabe: HalloWelt!

Wenn Sie zwischen die einzelnen Variablen, die hier je ein Wort enthalten, ein Leerzeichen setzen wollen, müssen Sie dies explizit tun:

$test = $begruessung . " " . $wer;
print $test;           // Ausgabe: Hallo Welt!

Hier werden die Variable $begruessung mit einem Leerzeichen und der Variablen $wer verknüpft. Das Leerzeichen ist eine eigene Zeichenkette, die in Anführungszeichen gesetzt wird.

Innerhalb von doppelten Anführungszeichen wird alles vom Parser interpretiert, also auch der Wert einer Variablen an ihre Stelle geschrieben:

print $begruessung . " " . $wer;   // Ausgabe: Hallo Welt
// ist das Gleiche wie
print "$begruessung $wer";         // Ausgabe: Hallo Welt
// oder auch
print "Hi $wer";         // Ausgabe: Hi Welt

Innerhalb einfacher Anführungszeichen werden Variablen nicht interpretiert:

// aber nicht so:
print '$begruessung $wer';         // Ausgabe: $begruessung $wer

Wollen Sie Sonderzeichen wie das Dollarzeichen innerhalb einer Zeichenkette darstellen, die mit doppelten Anführungszeichen eingeklammert ist, müssen Sie diese mit einem Backslash \ maskieren.

print "\$wer ist die $wer";        // Ausgabe: $wer ist die Welt

Ein Backslash maskiert immer genau ein Zeichen. Maskiert werden müssen in doppelten Anführungszeichen die folgenden Zeichen:

\"

Anführungszeichen

\$

Dollarzeichen

\\

Backslash

$variable = "Hallo Welt!";
print "Die Variable \$variable hat den Wert \"$variable\".";
// Ausgabe: Die Variable $variable hat den Wert "Hallo Welt!".

Sie können die gleiche Ausgabe auch mit einfachen Anführungszeichen erzeugen. Dann müssen Sie für die Ausgabe des Variablenwerts die Anführungszeichen schließen. Für das nach dem Wert folgende doppelte Anführungszeichen und den abschließenden Punkt muss ein neuer Teil in einfache Anführungszeichen geklammert werden:

$variable = 'Hallo Welt!';
print 'Die Variable $variable hat den Wert "'. $variable .'".';
// Ausgabe: Die Variable $variable hat den Wert "Hallo Welt!".

Der Umgang mit Anführungszeichen, deren Maskierung und der Ausgabe von Variablen ist im Zusammenhang mit generiertem HTML-Code wichtig. Beachten Sie bei der Ausgabe von HTML-Code in Zeichenketten die Anführungszeichen für die HTML-Attribute. Gültiger HTML-Code enthält doppelte Anführungszeichen:

<a href="index.php">home</a>

Wenn Sie diesen Link mit PHP ausgeben wollen, dann können Sie entweder einfache Anführungszeichen benutzen oder die doppelten Anführungszeichen maskieren:

print '<a href="index.php">home</a>';
print "<a href=\"index.php\">home</a>";

Wenn Sie nun zum Beispiel den Linktext in einer PHP-Variablen gespeichert haben, weil Sie ihn zum Beispiel aus einer Datenbank ausgelesen haben, dann müssen Sie bei der Ausgabe die unterschiedlichen Verhalten von Variablen in Anführungszeichen beachten:

$linktext = 'home';
print '<a href="index.php">' . $linktext . '</a>';
print "<a href=\"index.php\">$linktext</a>";

In der zweiten Zeile werden einfache Anführungszeichen benutzt, daher muss die Variable $linktext außerhalb der Anführungszeichen stehen, damit der Wert der Variablen ausgegeben wird. In der dritten Zeile werden doppelte Anführungszeichen benutzt, daher kann die Variable innerhalb der Anführungszeichen stehen. Dafür müssen aber die doppelten Anführungszeichen, die zum HTML-Attribut href gehören, mit einem Backslash maskiert werden.

Die unterschiedlichen Verhaltensweisen von einfachen und doppelten Anführungszeichen sind zunächst verwirrend. Wenn Sie unsicher sind, bleiben Sie zunächst bei einer Sorte von Anführungszeichen. Wenn Sie sich für die den doppelten entscheiden, dann müssen Sie bestimmte Zeichen wie das Dollarzeichen $ und Anführungszeichen " maskieren. Wenn Sie einfache verwenden, müssen Sie für jede Variablenausgabe die Anführungszeichen verlassen. Einfache Anführungszeichen müssen Sie in einfachen Anführungszeichen ebenfalls maskieren. Benutzen Sie, was Ihnen einfacher erscheint. In den Unterlagen zu diesem Workshop werden Sie zur Übung immer wieder beide Varianten finden.

Der Vorteil von einfachen Anführungszeichen ist übrigens, dass sie etwas schneller verarbeitet werden können als doppelte, weil die Zeichenkette nur ausgegeben und nicht interpretiert wird. Der Unterschied ist jedoch nicht so gravierend, dass er grundsätzlich gegen die Verwendung von doppelten Anführungszeichen sprechen würde.

In doppelten Anführungszeichen können Sie auch weitere in der Ausgabe des Browsers nicht sichtbaren Escape-Zeichen verwenden. Diese Zeichen müssen maskiert werden:

\n

neue Zeile

\r

Wagenrücklauf

\t

Tabulator

Diese Formatierungsangaben beziehen sich auf das, was an den Browser geschickt wird, ist also äquivalent zu dem, was Sie direkt in den HTML-Quellcode schreiben. Im folgenden Beispiel erzeugen alle vier print-Anweisungen die gleiche Ausgabe im Browser: die beiden Zeilen stehen direkt ohne Zeilenumbruch hintereinander. Einen Unterschied sehen Sie lediglich im Quellcode, der im Browser ankommt.

<!-- dies ist HTML-Code! -->
erste Zeile
zweite Zeile 

<?php
print "erste Zeile
zweite Zeile";
?>

<?php
print "erste Zeile\nzweite Zeile";
?>

<?php
print "erste Zeile";
print "zweite Zeile";
?>

Das erste Beispiel enthält schlichten HTML-Code mit einem einfachen manuellen Zeilenumbruch. Bei den mittleren beiden Beispielen ist ein Zeilenumbruch innerhalb der Zeichenkette gespeichert. Ein Zeilenumbruch innerhalb von einfachen oder doppelten Anführungszeichen wird also als solcher auch gespeichert. Dieses Verhalten ist in "PHP lernen (3)" im Zusammenhang mit der Verarbeitung von Formulareingaben in mehrzeiligen Textfeldern interessant. Im vierten Beispiel wird jede einzelne print-Anweisung aneinandergehängt.

Ein \n hat keinesfalls zur Folge, dass bei der Ausgabe im Browser ein Zeilenumbruch erfolgt. Der Zeilenumbruch wird lediglich im generierten HTML-Quellcode dargestellt. Wie Sie bereits gesehen haben, werden einzelne print-Anweisungen im Quelltext in einer Zeile hintereinander weg ausgegeben. Das \n kann für die bessere Übersicht im an den Browser geschickten HTML-Quellcode verwendet werden. Wenn Sie in einer Zeichenkette \n als Steuerzeichen haben und daraus automatisch einen HTML-Zeilenumbruch generieren wollen, verwenden Sie einfach die Funktion nl2br() (New Line To Break):

$zeichenkette = "irgendein\nmehrzeiliger Text";
print nl2br($zeichenkette);

/* Ausgabe im Quelltext des Browsers:
irgendein<br />
mehrzeiliger Text 
*/

// oder auch:
print nl2br("erste Zeile\nzweite Zeile");

Die Funktion nl2br() schreibt zusätzlich zum \n ein XML-konformes break <br /> in die Zeichenkette, das heißt, es wird sowohl im Quelltext als auch in der Anzeige des Browsers ein Zeilenumbruch gesetzt.

Beachten Sie, dass diese Escape-Zeichen nur in doppelten Anführungszeichen interpretiert werden. Folgendes Beispiel funktioniert nicht:

print 'irgendein\nmehrzeiliger Text';
// Ausgabe: irgendein\nmehrzeiliger Text

Es wird nicht nur kein Umbruch in der Ausgabe erzeugt, sondern das \n auch noch direkt ausgegeben.

Boolean: Wahrheitswerte

Ein Booleanscher oder Boolesche Datentyp ist der einfachste Datentyp in PHP und drückt einen Wahrheitswert aus. Der Wahrheitswert kann entweder wahr, also true, oder falsch, also false sein. Sie finden häufig die Gleichsetzung von true mit 1 und false mit 0, was aber nicht korrekt ist.

Der boolesche Typ wird häufig in Kontrollstrukturen mit Vergleichoperatoren benutzt. Wenn zum Beispiel ein Vergleich zweier Werte wahr ist, wird eine bestimmte Aktion ausgeführt, sonst nicht oder eine andere. Ähnlich wird ein Boolean als Rückgabewert von Funktionen benutzt. Wenn eine Funktion versucht, eine Aktion auszuführen, gibt der Boolesche Rückgabewert an, ob diese Aktion gelungen ist. Zum Beispiel beim Versuch eine Datenbankverbindung aufzubauen, wird die Funktion mysql_connect() im Erfolgsfall eine Kennung für die Verbindung zurückgeben oder wenn der Verbindungsversuch gescheitert ist, false.

Wenn wir im nächsten Teil zu den Kontrollstrukturen, Vergleichsoperatoren und Funktionen kommen, werden Sie die Bedeutung und Anwendung dieses Datentypen besser verstehen.

print oder echo

Sie haben bereits gesehen, dass für die Ausgabe am Bildschirm der print-Befehl verwendet wird. Sie können auch genauso gut echo verwenden.

<?php 
echo "Hallo Welt!" 
?>

Es ist im Grunde egal, was Sie verwenden. Zum kleinen Unterschied steht in den PHP-FAQs:

echo() ist ein internes Sprachkonstrukt und gibt nichts zurück, print() ist eine Expression.

Als Expression hat print einen Rückgabewert. Falls Sie diesen Rückgabewert brauchen, müssen Sie print verwenden. In der Regel werden Sie diesen nicht verwenden wollen. Damit ist es im Grunde egal, ob Sie print und echo verwenden.

Es gibt allerdings einen Unterschied in der Syntax. Mit print müssen Sie den Punkt als Verknüpfungsoperator verwenden. Wenn Sie echo benutzen, dürfen Sie neben dem Punkt auch das Komma als Verknüpfungsoperator verwenden. Folgende Varianten führen alle zum gleichen Ergebnis:

<?php
print $begruessung . " " . $wer;   // Ausgabe: Hallo Welt
echo  $begruessung . " " . $wer;   // Ausgabe: Hallo Welt
echo  $begruessung , " " , $wer;   // Ausgabe: Hallo Welt
?>

Beide Ausgabeanweisungen werden Sie vielleicht auch mit runden Klammern sehen. Das ist lediglich eine Syntaxvariante.

<?php 
echo "Hallo Welt!"; 
echo ("Hallo Welt!"); 
print "Hallo Welt!"; 
print ("Hallo Welt!"); 
?>

Unterm Strich ist es Geschmackssache.

Mitglied werden, Vorteile nutzen!

  • Sie können alles lesen und herunterladen: Beiträge, PDF-Dateien und Zusatzdateien (Checklisten, Vorlagen, Musterbriefe, Excel-Rechner u.v.a.m.)
  • Unsere Autoren beantworten Ihre Fragen

Downloads zu diesem Beitrag

Newsletter abonnieren