Rechnen in PHP

Bei dynamischen Websites, die in PHP programmiert sind, müssen häufig mit Zahlen und/oder Variablen Berechnungen durchgeführt werden. Ein typischer Anwendungsfall ist ein Online-Shop, in dem z.B. die Produktpreise und die Versandkosten addiert werden müssen. Für die Grundrechenarten werden in PHP die folgenden Operatoren verwendet.

  • + (für Addition)
  • - (für Subtraktion)
  • * (für Multiplikation)
  • / (für Division)
  • % (für Modulo, Restbildung)

Hierbei kann man sowohl Zahlen, als auch Variablen verwenden und das Ergebnis einer Variable zuweisen. Die Zahlen werden dabei nicht in Hochkommas gesetzt, da sie sonst Zeichenketten (Strings) wären. Ein paar Beispiele.

//Rechnen mit Zahlen
$ergebnis1 = 20 + 10;
$ergebnis2 = 20 - 10;
$ergebnis3 = 20 * 10;
$ergebnis4 = 20 / 10;
$ergebnis5 = 20 % 10;

//Rechnen mit Variablen
$zahl1 = 20;
$zahl2 = 10;
$ergebnis6 = $zahl1 + $zahl2; //$ergebnis6 wäre 30
$ergebnis7 = $zahl1 - $zahl2; //$ergebnis7 wäre 10
$ergebnis8 = $zahl1 * $zahl2; //$ergebnis8 wäre 200
$ergebnis9 = $zahl1 / $zahl2; //$ergebnis9 wäre 2
$ergebnis10 = $zahl1 % $zahl2; //$ergebnis10 wäre 0 (20/10, Rest ist 0)

Dabei gelten die üblichen mathematischen Regeln wie Punkt-vor-Strich-Rechnung und Klammersetzung. Ein paar Beispiele.

$ergebnis1 = 20 * 10 + 10; //ergebnis1 wäre 210
$ergebnis2 = 20 * (10 + 10); //ergebnis2 wäre 400

$ergebnis3 = 20 / 10 + 10; //ergebnis3 wäre 12
$ergebnis4 = 20 / (10 + 10); //ergebnis4 wäre 1

Datentyp bei Berechnungen

Zur Durchführung von Berechnungen werden in PHP die folgenden Datentypen verwendet.

  • int (Integer, Ganzzahl)
  • float (Gleitpunktzahl, Fließkommazahl)

Beim Datentyp float verwendet man als Trennzeichen vor den Nachkommastellen einen Punkt (statt Komma). Anders als in vielen Programmiersprachen muss in PHP bei der Variablendeklaration der Datentyp nicht angegeben werden, um damit Berechnungen durchführen zu können. Der PHP-Interpreter ermittelt den Datentyp automatisch und nimmt auch automatische Umwandlungen des Datentyps vor. Beim folgenden Beispiel ist die Variable $var zunächst vom Datentyp int, nach der Berechnung vom Typ float.

$var = 0; // int
$var1 = 1; // int
$var2 = 2.2; // float

// Berechnung
$var = $var1 + $var2;

// Ausgabe ist 3.2, Typ ist float!
echo $var;

In PHP kann sogar eine automatische Typkonvertierung von Zeichenketten vorgenommen werden, wenn der Inhalt auch Zahlen repräsentieren kann. Beim folgenden Beispiel sind die Inhalte von $var1 und $var2 eigentlich Zeichenketten (Strings), da sie in Hochkommas gesetzt sind. Da man nur mit Zahlen rechnen kann, sollte eine Berechnung normalerweise nicht möglich sein. In PHP ist das jedoch aufgrund der automatischen Typkonvertierung möglich.

$var1 = '1'; // Zeichenkette 
$var2 = '2.2'; // Zeichenkette 

// Berechnung
$var = $var1 + $var2;

// Ausgabe ist 3.2!
echo $var;

Eine automatische Typkonvertierung wird sogar dann vorgenommen, wenn die Zeichenkette Ziffern und Buchstaben enthält. Hierbei muss die Zeichenkette jedoch mit den Ziffern beginnen, sodass diese in eine Zahl umgewandelt werden kann.

$var1 = '3 Äpfel'; // Zeichenkette 
$var2 = '2.2'; // Zeichenkette 

// Berechnung
$var = $var1 + $var2;

// Ausgabe ist 5.2!
echo $var;

Wenn man eine Berechnung mit einer Zeichenkette durchführt und die ersten Zeichen keine Ziffern sind, dann wird die Berechnung trotzdem durchgeführt und die Zeichenkette wird dabei als 0 gewertet.

$var1 = '5'; // Zeichenkette 
$var2 = 'a'; // Zeichenkette 

// Addition
$var = $var1 + $var2;

// Ausgabe ist 5
echo $var;

// Subtraktion
$var = $var1 - $var2;

// Ausgabe ist 5
echo $var;

// Multiplikation
$var = $var1 * $var2;

// Ausgabe ist 0
echo $var;

// Division
$var = $var1 / $var2;

// Fehler wegen Division durch 0
echo $var;

Auch wenn der PHP-Interpreter sehr tolerant in der Handhabung von Zeichenketten und Zahlen ist, sollte man trotzdem soweit es geht Zahlen nicht in Hochkomma setzen, um potenzielle Fehler auszuschließen.

Punkt als Verkettungsoperator und Dezimaltrennzeichen

In PHP verwendet man bei Fließkommazahlen als Dezimaltrennzeichen einen Punkt. Der Punkt hat jedoch auch die Funktion eines Verkettungsoperators, um Variablen und/oder Zeichenketten zu verketten. Im Zusammenhang mit der Verwendung als Dezimaltrennzeichen können daher Konflikte bzw. Fehler auftreten. Beim folgenden Beispiel dürfte nichts ausgegeben werden.

echo 'Zahl ist:'.2.5;

Der Fehler kann behoben werden, indem man die Zahl in Klammern setzt oder bei den Punkten rechts und links ein Leerzeichen setzt, die als Verkettungsoperatoren fungieren sollen.

// Funktioniert
echo 'Zahl ist:'.(2.5);

// Funktioniert ebenfalls
echo 'Zahl ist:' . 2.5;

Eine andere Möglichkeit ist, die Zahl einer Variable zuzuweisen und die Verkettung mit der Variable vorzunehmen.