Wer schon einmal PHP-Code gewartet oder erweitert hat, kennt das Ritual: Irgendwo im Datenstrom muss überprüft werden, ob eine Variable tatsächlich eine Zeichenkette ist. Genau hier kommt is_string() ins Spiel.

Doch bevor wir tiefer in Beispiele oder Sonderfälle eintauchen, ein kurzer Blick auf das Fundament: Die Funktion nimmt eine beliebige Variable entgegen und prüft nur eines – ihr Datentyp. Liefert sie „String“ zurück, gibt is_string() den booleschen Wert true aus; bei jedem anderen Typen lautet das Resultat false.
Klingt banal? Vielleicht. Trotzdem ist es ein Werkzeug, auf das kaum jemand verzichten möchte. Schließlich verhindert es subtile Fehler, die erst unter Last oder in seltenen Pfaden auffallen würden.
Noch ein Detail, das oft übersehen wird: is_string() ist kein Neuzugang. Seit PHP 4 gehört sie zum festen Kern und läuft daher reibungslos unter PHP 5, 7 oder auch 8. Das schafft Vertrauen – gerade in Legacy-Projekten, in denen eine heterogene Versionslandschaft Realität ist.
Kurzum: Wer robuste, gut wartbare PHP-Anwendungen schreiben will, setzt is_string() regelmäßig ein. Manchmal unspektakulär, aber stets zuverlässig.
Syntax und Verwendung von der PHP Funktion is_string()
Lass uns zuerst die formale Syntax und die Funktionsweise genauer betrachten.
Die Syntax von is_string() sieht folgendermaßen aus:
is_string(mixed $mWert): bool
Der Parameter $mWert kann einen beliebigen Datentyp enthalten, also zum Beispiel Integer, Float, Boolean, Array, Object, Null oder eben einen String. Die Funktion prüft dann, ob dieser Wert tatsächlich eine Zeichenkette ist.
Das Rückgabeergebnis ist ein Boolean:
- true, wenn $mWert vom Typ String ist
- false, wenn nicht
Das klingt zunächst simpel, ist aber in der Praxis äußerst hilfreich, wie die nächsten Beispiele zeigen werden.
Grundlagen: is_string() in Aktion (Code-Beispiele)
Um den Einsatz von is_string() besser zu verstehen, schauen wir uns verschiedene Anwendungsfälle direkt im Code an.
Ein einfacher Einstieg zeigt bereits die typische Nutzung:
Beispiel 1: Einfache Überprüfung
Hier ein einfaches Beispiel, das zwei verschiedene Werte prüft – einen String und eine Zahl:
$sText = "Hallo Welt";
$iZahl = 42;
/** Prüft, ob $sText ein String ist */
if (is_string($sText)) {
echo '$sText ist ein String.' . PHP_EOL;
} else {
echo '$sText ist kein String.' . PHP_EOL;
}
/** Prüft, ob $iZahl ein String ist */
if (is_string($iZahl)) {
echo '$iZahl ist ein String.' . PHP_EOL;
} else {
echo '$iZahl ist kein String.' . PHP_EOL;
}
Das Ergebnis ist eindeutig:
$sText ist ein String. $iZahl ist kein String.
Beispiel 2: Überprüfung verschiedener Datentypen
Für den Überblick folgt eine kleine Tabelle, wie sich is_string() bei unterschiedlichen Datentypen verhält:
Wert | PHP-Code | Ergebnis von is_string() |
String | "Test" | true |
Integer | 123 | false |
Float | 12.34 | false |
Boolean | true | false |
Array | array(1,2,3) | false |
Null | null | false |
Object | new stdClass() | false |
Auch im Code kannst du das leicht testen:
$aWerte = [
"Text",
123,
12.34,
true,
array(1, 2, 3),
null,
new stdClass()
];
foreach ($aWerte as $mWert) {
/** Gibt den Typ und das Ergebnis der Prüfung aus */
echo 'Typ: ' . gettype($mWert) . ' | ';
echo 'is_string: ' . (is_string($mWert) ? 'true' : 'false') . PHP_EOL;
}
Praxisbeispiele: Wo is_string() wirklich nützlich ist
Jetzt schauen wir uns praktische Szenarien an, in denen die Funktion eine entscheidende Rolle spielt.
Viele PHP-Anwendungen müssen Benutzereingaben oder externe Daten verarbeiten. Ohne vorherige Typ-Prüfung können leicht unerwartete Fehler entstehen.
Oft soll etwa ein Benutzername oder ein Kommentarfeld geprüft werden, damit kein unerwünschter Typ (z. B. ein Array oder Integer) verarbeitet wird:
$mBenutzername = $_POST['benutzername'] ?? '';
/** Prüft, ob der Benutzername ein String ist */
if (is_string($mBenutzername)) {
echo "Benutzername akzeptiert.";
} else {
echo "Ungültiger Wert für den Benutzernamen.";
}
Gerade bei der Formularverarbeitung verhindert so eine Prüfung, dass etwa durch manipulierte Requests oder Fehler im Frontend fehlerhafte Werte verarbeitet werden.
Beispiel 4: Dynamische Verarbeitung von API-Daten
Bei der Arbeit mit APIs, etwa beim Parsen von JSON, ist oft nicht garantiert, dass bestimmte Werte tatsächlich vom Typ String sind. Typische Konstellation:
/** Angenommen, $oApiAntwort ist ein Objekt nach json_decode() */
$mWert = $oApiAntwort->titel ?? null;
/** Sicherstellen, dass der Titel wirklich eine Zeichenkette ist */
if (is_string($mWert)) {
/** Weiterverarbeitung des Titels als String */
echo "Titel: $mWert";
} else {
echo "Fehler: Kein gültiger String für Titel!";
}
Ohne diese Prüfung könnte ein Fehler auftreten, wenn z. B. ein Array oder Null statt eines Strings geliefert wird.
Wichtige Fallstricke und wie man sie vermeidet
Trotz ihrer Einfachheit gibt es beim Einsatz von is_string() einige Feinheiten, die man kennen sollte.
Ein besonders wichtiger Fallstrick betrifft Objekte mit einer eigenen __toString()-Methode:
is_string() gibt bei Objekten mit __toString() trotzdem false zurück.
Das folgende Beispiel zeigt, was gemeint ist:
class oMitToString {
public function __toString() {
return "Ich bin ein String";
}
}
$oBeispiel = new oMitToString();
if (is_string($oBeispiel)) {
echo "Objekt wird als String erkannt.";
} else {
echo "Objekt wird NICHT als String erkannt.";
}
Ausgabe:
Objekt wird NICHT als String erkannt.
Obwohl das Objekt per __toString() konvertierbar wäre, liefert is_string() immer false für Objekte. Hier kommt oft eine Hilfsfunktion ins Spiel, etwa eine eigene bIstStringy()-Implementierung:
function bIstStringy($mWert) {
/** Prüft, ob $mWert ein String ist oder ein Objekt mit __toString() */
if (is_string($mWert)) {
return true;
}
if (is_object($mWert) && method_exists($mWert, '__toString')) {
return true;
}
return false;
}
Mit dieser Funktion kannst du also auch “string-ähnliche” Objekte zuverlässig erkennen.
Leere Strings und Strings mit Leerzeichen:
Ein weiteres Detail: Sowohl ein leerer String ('') als auch ein String nur mit Leerzeichen (' ') werden von is_string() als gültige Zeichenkette erkannt.
$sLeer = '';
$sNurLeerzeichen = ' ';
/** Prüft beide Varianten */
var_dump(is_string($sLeer)); // true
var_dump(is_string($sNurLeerzeichen)); // true
Wenn du wirklich sicherstellen willst, dass der String nicht nur aus Leerzeichen besteht, empfiehlt sich eine Kombination mit trim():
if (is_string($sNurLeerzeichen) && trim($sNurLeerzeichen) !== '') {
echo "String enthält sichtbare Zeichen.";
} else {
echo "String ist leer oder enthält nur Leerzeichen.";
}
Wann sollte man is_string() nicht verwenden? (Vergleich mit ähnlichen Funktionen)
Nicht immer ist is_string() das richtige Werkzeug für jede Aufgabe. Ein Vergleich mit verwandten Funktionen zeigt, wann Alternativen besser passen.
is_string() vs. is_numeric():
- is_numeric() prüft, ob der Wert eine Zahl oder eine numerische Zeichenkette ist – also z. B. auch "123" oder "3.14".
- is_string() prüft ausschließlich auf den Datentyp String – unabhängig vom Inhalt.
Beispiel:
$sZahl = "123";
$iZahl = 123;
/** Gibt bei beiden true aus: */
var_dump(is_numeric($sZahl)); // true
var_dump(is_numeric($iZahl)); // true
/** Aber nur hier true: */
var_dump(is_string($sZahl)); // true
var_dump(is_string($iZahl)); // false
is_string() vs. ctype_digit():
- ctype_digit() prüft, ob ein String ausschließlich aus Ziffern besteht.
- is_string() ignoriert den Inhalt, Hauptsache Typ String.
Beispiel:
$sZiffern = "12345";
$sGemischt = "abc123";
/** ctype_digit() ist nur bei reinen Ziffern true */
var_dump(ctype_digit($sZiffern)); // true
var_dump(ctype_digit($sGemischt)); // false
/** is_string() ist bei beiden true, weil beide vom Typ String sind */
var_dump(is_string($sZiffern)); // true
var_dump(is_string($sGemischt)); // true
Verwandte Funktionen auf einen Blick
Hier eine kompakte Übersicht wichtiger, verwandter Funktionen:
Damit hast du ein ganzes Arsenal an Typ-Prüfungen für robusten PHP-Code.
8. Fazit – das Wichtigste in Kürze
is_string() wirkt unscheinbar, fast nebensächlich – und ist doch ein kleines Arbeitstier. Ein einziger Aufruf trennt echte Zeichenketten von allem, was nur so aussieht. Diese simple Kontrolle räumt eine ganze Klasse von Laufzeitfehlern ab, noch bevor sie entstehen.
Doch kein Werkzeug ist makellos. Kommt ein Objekt daher, das über __toString() brav einen String ausspuckt, zeigt sich die Grenze: is_string() blickt nur auf den nackten Typ, nicht auf mögliche Konvertierungen. Wer das vergisst, tappt unter Umständen in die Falle.
Die Lösung? Kontextbewusstsein. Ein zweiter Blick. Und die Praxisbeispiele, die wir vorhin durchgearbeitet haben. Hält man sich an sie, schreibt man entspannter – und kann darauf vertrauen, dass der Code sich zur Laufzeit so verhält, wie er es zur Compile-Time verspricht.