Menu

PHP Datentypen: int, float, string, bool, array, null

PHP hat zehn Typen: vier skalare (int, float, string, bool), vier zusammengesetzte (array, object, callable, iterable) und zwei besondere (null, resource). var_dump($x) zeigt Typ und Wert eines Werts, gettype($x) liefert den Namen des Typs.

Diese Seite enthält ausführbare Editoren - bearbeiten, ausführen und Ausgabe sofort sehen.

PHP hat acht Typen, die du jeden Tag verwendest: int, float, string, bool, array, object, null und dazu callable für Funktionen, die du weitergibst. Eine Variable hat keinen festen Typ; ihr aktueller Wert hat einen. var_dump($x) zeigt Typ und Wert, und gettype($x) liefert den Typ als String.

Die erste Spalte ist gettype(), die zweite get_debug_type(). Ersetze einen Wert durch einen eigenen und führe den Code erneut aus. Bei einigen Namen sind sich die beiden uneinig: gettype sagt aus historischen Gründen integer, double und boolean, während get_debug_type die Namen aus Typdeklarationen verwendet (int, float, bool) und bei einem Objekt den Klassennamen liefert.

Die PHP-Typen im Überblick

TypBeispielHinweise
int42, -7, 0x1A, 1_000_000ganze Zahlen, auf modernen Systemen 64 Bit
float3.14, 1.5e3Dezimalzahlen, ungenau wie in jeder Sprache
string"hi", 'hi'eine Folge von Bytes, nicht von Zeichen
booltrue, falseGroß- und Kleinschreibung egal (TRUE geht auch)
array[1, 2], ["a" => 1]geordnete Map: Liste und Dictionary in einem
objectnew User(), new stdClass()eine Instanz einer Klasse
nullnullder einzige Wert des Typs null; auch „kein Wert gesetzt“
callable'strlen', fn($x) => $x * 2alles, was sich aufrufen lässt
iterableein Array oder ein Traversable-Objektwas foreach akzeptiert
resourcedas Ergebnis von fopen()ein Handle auf etwas außerhalb von PHP

Werte mit var_dump untersuchen

var_dump ist das Werkzeug, um zu sehen, was du wirklich hast. Es gibt den Typ, den Wert und bei Strings die Länge in Bytes aus:

echo würde bei den ersten drei 10 ausgeben und den Unterschied verstecken. Die Länge in string(5) "café" zählt Bytes, und deshalb unterscheiden sich strlen und mb_strlen bei Nicht-ASCII-Text.

Ganzzahlen und Floats

Eine Ganzzahl ist eine ganze Zahl. Literale dürfen zur besseren Lesbarkeit Unterstriche enthalten und in Hex-, Oktal- oder Binärschreibweise stehen. Ein Float ist jede Zahl mit Dezimalpunkt oder Exponent, und wie in jeder Sprache speichert er die meisten Dezimalzahlen nur näherungsweise:

Vergleiche Floats nie mit ==; vergleiche die Differenz mit einer kleinen Toleranz oder runde vorher beide Seiten. Für Geldbeträge speicherst du ganze Cent als Ganzzahlen.

Booleans und welche Werte false sind

Ein bool ist true oder false. Wo PHP eine Bedingung erwartet (if, while, !), wird jeder Wert in bool umgewandelt, und eine kurze Liste von Werten zählt als false: false, 0, 0.0, "", "0", [] und null. Alles andere ist true. Die Tabelle zeigt jeden Wert mit seinem Typ, seiner Umwandlung in bool und ob er numerisch ist:

gettype, (bool) und is_numeric für jeden Wert von $x
Point at or tap a cell to read it as PHP.
$xgettypeboolis_numeric
0
1
-1
0.0
1.5
"0"
""
" "
"0.0"
"10"
"1e1"
"abc"
"null"
true
false
null
[]
[0]
Every cell computed by PHP 8.3.19.

Die Überraschungen sind "0.0", " " und "null": Alle drei sind nicht leere Strings und nicht "0", also sind sie true, und if ($value) führt für sie den Rumpf aus.

Arrays, Objekte und null

Ein Array enthält eine beliebige Mischung von Werten unter Ganzzahl- oder String-Schlüsseln. Ein Objekt ist eine Instanz einer Klasse; stdClass ist PHPs leere Klasse für schnelle Objekte, und (object) macht aus einem Array ein Objekt. null bedeutet „kein Wert“:

Einen Typ mit is_*-Funktionen prüfen

Für jeden Typ gibt es eine Testfunktion, die true oder false zurückgibt. is_numeric ist etwas anderes als is_int: Es akzeptiert auch numerische Strings, und genau das willst du beim Prüfen von Formulareingaben.

Weitere: is_bool, is_array, is_object, is_null, is_callable, is_iterable und $x instanceof ClassName für eine bestimmte Klasse.

Typumwandlung und strikte Typen

PHP wandelt Typen automatisch um, wenn ein Operator einen anderen braucht. Ein numerischer String in einer Rechnung wird zur Zahl, und . macht aus Zahlen Strings. Ein String, der gar nicht numerisch ist, lässt sich nicht addieren, und PHP 8 wirft einen TypeError:

Typisierte Parameter wandeln ebenfalls um, außer die Datei beginnt mit declare(strict_types=1);. Dann schlägt ein Aufruf mit dem falschen skalaren Typ fehl, statt umgewandelt zu werden:

Um bewusst umzuwandeln, castest du: (int) "42", (float) "3.5", (string) 10, (bool) "0". Die Seite zu Type Casting behandelt jeden Cast und seine Sonderfälle.

Typischer Fehler: verschiedene Typen mit == vergleichen

Weil == vor dem Vergleich umwandelt, können zwei Werte verschiedener Typen auf eine Weise „gleich“ sein, die zu Bugs führt, etwa "1e1" == "10" (beides ist die Zahl 10) oder null == false. Verwende ===, das zusätzlich denselben Typ verlangt, außer du willst die Umwandlung:

PHP 8 hat den schlimmsten Fall behoben: "abc" == 0 war früher true und ist jetzt false, weil ein nicht numerischer String als String verglichen wird. Die vollständigen Tabellen stehen auf der Seite zu Vergleichsoperatoren.

Häufig gestellte Fragen

Wie prüfe ich den Typ einer Variable in PHP?

var_dump($x) gibt Typ und Wert aus, zum Beispiel int(5). gettype($x) liefert den Typnamen als String ("integer"), und get_debug_type($x) liefert den modernen Namen ("int" oder bei Objekten den Klassennamen). Um auf einen bestimmten Typ zu testen, verwendest du is_int, is_string, is_array und die anderen is_*-Funktionen.

Warum liefert gettype bei einem Float "double"?

Aus historischen Gründen meldet gettype() Floats als "double" und Ganzzahlen als "integer". get_debug_type(), eingeführt in PHP 8, liefert "float" und "int", also dieselben Namen, die du in Typdeklarationen schreibst.

Welche Werte sind in PHP false?

In bool umgewandelt sind diese Werte false: false, 0, 0.0, "", "0", [] und null. Alles andere ist true, auch "0.0", " " und "false".

Was ist die größte Ganzzahl in PHP?

PHP_INT_MAX, auf 64-Bit-Systemen 9223372036854775807. Wenn du darüber hinaus addierst, gibt es keinen Überlauf zum Anfang: Das Ergebnis wird ein Float und verliert Genauigkeit.

Ist PHP stark oder schwach typisiert?

PHP ist dynamisch typisiert und wandelt Typen standardmäßig um, wenn es kann ("10" + 5 ist 15). Mit declare(strict_types=1); am Anfang einer Datei lehnen Aufrufe typisierter Funktionen in dieser Datei falsche skalare Typen mit einem TypeError ab, statt sie umzuwandeln.

Illustration der Programmiersprachen bei Coddy

Lerne mit Coddy zu programmieren

LOS GEHT'S