Datentypen von Variablen umwandeln

PHP zählt zu den schwach typisierten Programmiersprachen. Wenn einer Variable ein Wert zugewiesen wird, dann nimmt der PHP-Interpreter die Typkonvertierung automatisch vor. Von welchem Datentyp eine Variable ist, hängt dabei vom zugewiesenen Wert ab. Weist man z.B. einer Variable eine ganze Zahl zu, ist der Datentyp automatisch int.

Es ist möglich, bereits bei der Zuweisung den Datentyp festzulegen. Hierbei wird in runden Klammern der Datentyp dem Wert vorangestellt. Beim folgenden Beispiel wird die Fließkommazahl 4.2 zu int und eine Ausgabe des Werts ergibt 4.

// Typ int festlegen
$var1 = (int) 4.2;

// Datentyp ausgeben (integer)
echo gettype($var1);

// Wert ausgeben (4)
echo $var1;

Hierbei spielt es keine Rolle, ob der Datentyp als int oder als integer angegeben wird. Mit beiden Angaben wird der Datentyp der Variable zu einer Ganzzahl. Auch bei den übrigen skalaren Datentypen gibt es alternative Schreibweisen (außer string).

// Zeichenkette
$var1 = (string) 4.2;

// Ganzzahl
$var2 = (int) 4.2;
$var3 = (integer) 4.2;

// Fließkommazahl
$var4 = (float) 4;
$var5 = (double) 4;
$var6 = (real) 4;

// Boolescher Wert
$var7 = (bool) 4;
$var8 = (boolean) 4;

In der Regel macht es natürlich wenig Sinn, einer Variable einen Wert zuzuweisen und gleichzeitig den Datentyp umzuwandeln. In manchen Situationen kann das Verhalten jedoch nützlich sein, z.B. wenn man die Nachkommastellen einer Fließkommazahl entfernen möchte. In diesem Zusammenhang ist es interessant zu wissen, welche Werte die Variablen bei solchen Umwandlungen haben. Hierbei konnten folgende Beobachtungen gemacht werden.

Bei Umwandlungen zu string (Zeichenkette)

  • 0 ergibt die Zeichenkette 0.
  • Ganzzahl ergibt die Zeichenkette mit der ganzen Zahl.
  • 0.0 ergibt die Zeichenkette 0.
  • Fließkommazahl ergibt die Zeichenkette mit der Fließkommazahl.
  • Boolescher Wert TRUE ergibt die Zeichenkette 1.
  • Boolescher Wert FALSE ergibt eine leere Zeichenkette.

Mit dem folgenden Beispielcode wird das Verhalten ersichtlich.

// Umwandlung zu Zeichenkette
$var1 = (string) 0;
$var2 = (string) 4;
$var3 = (string) 0.0;
$var4 = (string) 4.2;
$var5 = (string) TRUE;
$var6 = (string) FALSE;

// Ausgabe ergibt die Werte 0 4 0 4.2 1
echo $var1;
echo $var2;
echo $var3;
echo $var4;
echo $var5;
echo $var6;

Bei Umwandlungen zu int (Ganzzahl)

  • Eine Zeichenkette wird zu einer Ganzzahl, die aus den Ziffern am Anfang gebildet wird.
  • Wenn die Zeichenkette nicht mit einer Ziffer beginnt, wird die Variable zu 0.
  • Eine leere Zeichenkette wird zu 0.
  • Fließkommazahlen werden durch Entfernen der Nachkommastellen zu Ganzzahlen.
  • Der boolesche Wert TRUE wird zu 1.
  • Der boolesche Wert FALSE wird zu 0.

Mit dem folgenden Beispielcode wird das Verhalten ersichtlich.

// Umwandlung zu Ganzzahl
$var1 = (int) '4.2 Stück';
$var2 = (int) 'a';
$var3 = (int) '';
$var4 = (int) 4.2;
$var5 = (int) TRUE;
$var6 = (int) FALSE;

// Ausgabe ergibt die Werte 4 0 0 4 1 0
echo $var1;
echo $var2;
echo $var3;
echo $var4;
echo $var5;
echo $var6;

Bei Umwandlungen zu float/double (Fließkommazahl)

  • Eine Zeichenkette wird zur Fließkommazahl, die aus den Ziffern (inkl. Dezimalpunkt) am Anfang gebildet wird.
  • Wenn die Zeichenkette nicht mit einer Ziffer beginnt, wird die Variable zu 0.
  • Eine leere Zeichenkette wird zu 0.
  • Ganzzahlen werden zu Fließkommazahlen, ohne dabei Nachkommastellen hinzuzufügen.
  • Der boolesche Wert TRUE wird zur Fließkommazahl 1.
  • Der boolesche Wert FALSE wird zu 0.

Mit dem folgenden Beispielcode wird das Verhalten ersichtlich.

// Umwandlung zu Fließkommazahl
$var1 = (double) '4.2 Stück';
$var2 = (double) 'a';
$var3 = (double) '';
$var4 = (double) 4;
$var5 = (double) TRUE;
$var6 = (double) FALSE;

// Ausgabe ergibt die Werte 4.2 0 0 4 1 0
echo $var1;
echo $var2;
echo $var3;
echo $var4;
echo $var5;
echo $var6;

Bei Umwandlungen zu bool

  • Eine Zeichenkette mit mindestens einem Zeichen wird zu TRUE.
  • Eine leere Zeichenkette wird zu FALSE.
  • 0 ergibt FALSE.
  • Ganzzahl oder Fließkommazahl außer 0 ergibt TRUE.

Bei der Ausgabe mit echo ist zu beachten, dass beim Wert TRUE eine 1 und bei FALSE nichts ausgegeben wird.

// Umwandlung zu bool
$var1 = (bool) 'a';
$var2 = (bool) 4.2;
$var3 = (bool) '';
$var4 = (bool) 0;

// Ausgabe ergibt die Werte 1 1
echo $var1;
echo $var2;

// Ausgabe ergibt nichts, da FALSE
echo $var3;
echo $var4;

Wenn man möchte, dass bei FALSE ebenfalls etwas ausgegeben wird, kann man das auf verschiedenen Wegen erreichen. Man könnte beispielsweise eine Abfrage programmieren und für den Fall, dass der Wert FALSE ist, eine 0 ausgeben lassen.