is_scalar()
PHP is_scalar() prüft, ob eine Variable ein Integer, Float, String oder Boolean ist. Gibt false für Arrays, Objekte, NULL und Ressourcen zurück.
Einführung
is_scalar() ist eine eingebaute PHP-Funktion, die prüft, ob eine Variable einen skalaren Wert enthält. Ein Skalar ist ein einzelner, atomarer Wert — einer, der nicht aus anderen Werten zusammengesetzt ist. PHP kennt genau vier skalare Typen:
- integer — ganze Zahlen, z. B.
42 - float (double) — Zahlen mit Dezimalpunkt, z. B.
3.14 - string — Text, z. B.
"hello" - boolean —
trueoderfalse
Alles andere ist nicht-skalar: Arrays und Objekte sind zusammengesetzt (sie gruppieren viele Werte), während NULL- und resource-Werte spezielle Typen sind, die is_scalar() bewusst als false meldet. Diese Unterscheidung ist wichtig, weil skalare Werte sicher ausgegeben, verknüpft oder direkt gespeichert werden können, während zusammengesetzte Werte in der Regel zuerst durchlaufen oder untersucht werden müssen.
Syntax
is_scalar(mixed $value): boolDie Funktion nimmt ein einzelnes Argument, $value, und gibt true zurück, wenn es ein Integer, Float, String oder Boolean ist, und false für jeden anderen Typ — einschließlich Arrays, Objekte, NULL und Ressourcen.
Verwendungsbeispiel
Das folgende Beispiel prüft eine Variable von jedem gängigen Typ:
Der String, Float und Boolean sind alle Skalare, daher geben sie true zurück. Das Array ist ein zusammengesetzter Typ, daher gibt es false zurück.
Tipp:
var_dump()ist bei boolean-Ergebnissen klarer alsecho. Mitechogibttrueals1aus undfalseals leeren string, was leicht falsch gelesen werden kann. Weitere Informationen unter var_dump().
NULL, Objekte und Ressourcen sind nicht skalar
Diese drei Fälle verwirren am häufigsten, weil sie intuitiv „einfach" wirken, aber is_scalar() gibt für alle drei false zurück:
<?php
var_dump(is_scalar(null)); // bool(false) — NULL is its own type
var_dump(is_scalar(new stdClass())); // bool(false) — objects are compound
$handle = fopen("php://memory", "r");
var_dump(is_scalar($handle)); // bool(false) — a file resource
fclose($handle);
?>Wenn NULL ebenfalls als akzeptabel gelten soll, prüfe es separat: is_scalar($v) || is_null($v).
is_scalar() als Schutzprüfung verwenden
Ein häufiger Einsatz ist die Entscheidung, ob ein Wert sicher ausgegeben oder verknüpft werden kann. Zusammengesetzte Werte wie Arrays können nicht direkt in einen String umgewandelt werden (echo $array erzeugt eine Warnung), daher verhindert eine vorherige Prüfung Fehler:
<?php
function describe(mixed $value): string
{
if (is_scalar($value)) {
return "scalar value: $value";
}
return "non-scalar value of type " . gettype($value);
}
echo describe(42), "\n"; // scalar value: 42
echo describe([1, 2]), "\n"; // non-scalar value of type array
echo describe(null), "\n"; // non-scalar value of type NULL
?>Hier gibt gettype() den genauen Typ der nicht-skalaren Werte aus, während is_scalar() die druckbaren Werte vor Problemen schützt.
is_scalar() vs. typspezifische Prüfungen
is_scalar() ist eine praktische Abkürzung für „ist dies irgendein der vier skalaren Typen?" Wenn es auf einen bestimmten Typ ankommt, verwende stattdessen die dedizierte Funktion:
| Funktion | Gibt true zurück für |
|---|---|
is_int() | nur Integer |
is_float() | nur Floats |
is_string() | nur Strings |
is_bool() | nur Booleans |
is_scalar() | Integer oder Float oder String oder Boolean |
is_scalar() ist gleichbedeutend mit is_int($v) || is_float($v) || is_string($v) || is_bool($v), aber kürzer und klarer.
Fazit
is_scalar() gibt true nur für die vier skalaren Typen zurück — Integer, Float, String und Boolean — und false für Arrays, Objekte, NULL und Ressourcen. Es ist am nützlichsten als Schutzprüfung vor der Ausgabe oder Verknüpfung eines Wertes, dessen Typ nicht sicher bekannt ist. Wenn ein bestimmter Typ geprüft werden muss, greife auf is_int(), is_string() und ähnliche Funktionen zurück; wenn es nur darum geht „ist dies ein einfacher Einzelwert?", ist is_scalar() das richtige Werkzeug.