strval()
Die Funktion strval() ist eine eingebaute PHP-Funktion, die einen Wert in einen string umwandelt. Sie kann für jeden Datentyp verwendet werden.
Einführung
strval() ist eine eingebaute PHP-Funktion, die die String-Darstellung eines skalaren Werts zurückgibt. Sie ist die explizite, lesbare Art zu sagen „Gib mir diesen Wert als string" — dieselbe Umwandlung, die PHP implizit durchführt, wenn Sie einen Wert mit echo ausgeben oder mit . verketten, aber so geschrieben, dass Ihre Absicht klar ist.
Diese Seite erklärt, was strval() für jeden Datentyp zurückgibt, wie es mit null, Booleans, Floats, Arrays und Objekten umgeht, und wann Sie es anstelle eines Casts oder einer seiner Geschwisterfunktionen wie intval(), floatval() und boolval() verwenden sollten.
Syntax
strval(mixed $value): stringstrval() nimmt ein einzelnes Argument, $value, und gibt einen string zurück, der es repräsentiert. Es funktioniert mit jedem Skalar (int, float, bool, string), mit null und mit Objekten, die __toString() implementieren. Die Übergabe eines Arrays erzeugt den literalen string "Array" und löst eine Warnung aus (siehe Sonderfälle).
Grundlegendes Beispiel
Einen Integer, einen Float und einen Boolean in strings umwandeln:
$var1 ist ein Integer, $var2 ein Float und $var3 ein Boolean. Jeder wird in seine String-Form umgewandelt. Beachten Sie, dass true zu "1" wird — das überrascht viele Anfänger und ist die wichtigste Eigenheit, die man sich merken sollte.
Wie jeder Typ umgewandelt wird
strval() folgt den Standard-Typumwandlungsregeln von PHP. Die folgende Tabelle listet das Ergebnis für jeden skalaren Typ und für null auf.
| Eingabewert | strval()-Ergebnis | Hinweise |
|---|---|---|
10 (int) | "10" | Ziffern wie geschrieben |
3.14 (float) | "3.14" | Verwendet die precision-ini-Einstellung |
true (bool) | "1" | |
false (bool) | "" | Ein leerer string, nicht "0" |
null | "" | Leerer string |
"hello" (string) | "hello" | Unverändert zurückgegeben |
Die Regeln false → "" und null → "" sind es wert, auswendig gelernt zu werden — sie sind die klassische Ursache für „Warum ist meine Ausgabe leer?"-Fehler:
<?php
var_dump(strval(false)); // string(0) ""
var_dump(strval(null)); // string(0) ""
var_dump(strval(true)); // string(1) "1"
?>strval() vs. Cast vs. Verkettung
Diese drei erzeugen für Skalare das gleiche Ergebnis, daher geht es bei der Wahl um Lesbarkeit:
<?php
$n = 42;
$a = strval($n); // "42" — explicit, named, greppable
$b = (string) $n; // "42" — language cast
$c = "$n"; // "42" — string interpolation
$d = $n . ""; // "42" — concatenation trick (avoid)
?>Bevorzugen Sie strval() oder den (string)-Cast, wenn Sie explizit sein möchten. strval() glänzt in einer Situation, die ein Cast nicht abdecken kann: Es ist aufrufbar, sodass Sie es an Funktionen höherer Ordnung wie array_map() übergeben können:
<?php
$numbers = [1, 2, 3, 4];
// Turn every element into a string in one line.
$strings = array_map('strval', $numbers);
print_r($strings);
// Array
// (
// [0] => 1
// [1] => 2
// [2] => 3
// [3] => 4
// )
var_dump($strings[0]); // string(1) "1"
?>Sie können nicht array_map('(string)', $numbers) schreiben — es gibt keine Cast-Callable — daher ist strval der saubere Weg, einen Cast über eine Sammlung zu mappen.
Floats: Auf die Präzision achten
Floats werden mit der precision-ini-Direktive von PHP formatiert (standardmäßig 14 signifikante Stellen), und sehr große oder sehr kleine Zahlen wechseln zur wissenschaftlichen Notation. Das bedeutet, strval() ist nicht das richtige Werkzeug für die Anzeige von Geldbeträgen oder Ausgaben mit festen Dezimalstellen — verwenden Sie dafür number_format() oder sprintf().
<?php
echo strval(0.1 + 0.2) . "\n"; // 0.3 (precision rounds the float error)
echo strval(1.0) . "\n"; // 1 (trailing ".0" is dropped)
echo strval(1.0e21) . "\n"; // 1.0E+21 (scientific notation)
// For a fixed two-decimal price, use sprintf instead:
echo sprintf('%.2f', 1.0) . "\n"; // 1.00
?>Sonderfälle: Arrays und Objekte
strval() ist für Skalare gedacht. Zwei nicht-skalare Fälle verhalten sich besonders:
Arrays werden in den literalen string "Array" umgewandelt und lösen eine Warnung aus — fast nie das, was man möchte. Um ein Array in Text umzuwandeln, verwenden Sie implode() oder json_encode():
<?php
$data = [1, 2, 3];
echo strval($data); // Warning: Array to string conversion -> "Array"
echo implode(', ', $data); // 1, 2, 3
echo json_encode($data); // [1,2,3]
?>Objekte werden durch Aufruf ihrer __toString()-Methode umgewandelt. Wenn die Klasse keine definiert, wirft PHP einen Error:
<?php
class Money
{
public function __construct(private float $amount) {}
public function __toString(): string
{
return sprintf('$%.2f', $this->amount);
}
}
echo strval(new Money(5)); // $5.00
?>Wann strval() verwenden
- Einen Cast über eine Sammlung mappen mit
array_map('strval', $items)— der herausragende Anwendungsfall. - String-Semantik erzwingen vor einem strikten Vergleich (
===) oder vor der Übergabe an eine API oder Funktion, diestringals Typ erwartet. - Selbstdokumentierender Code, bei dem ein benanntes
strval()klarer lesbar ist als ein nackter(string)-Cast.
Für die umgekehrten Umwandlungen siehe die Begleitfunktionen intval(), floatval() und boolval(). Um den Typ eines Werts vor der Umwandlung zu prüfen, verwenden Sie gettype() oder ändern Sie ihn direkt mit settype().
Fazit
strval() gibt die String-Form eines skalaren Werts zurück und spiegelt dabei die impliziten Umwandlungsregeln von PHP wider, macht Ihre Absicht jedoch explizit. Merken Sie sich die drei Eigenheiten: true wird zu "1", sowohl false als auch null werden zum leeren string "", und Arrays werden zum warnungsträchtigen "Array". Greifen Sie darauf zurück, wenn Sie eine String-Umwandlungs-Callable benötigen (insbesondere mit array_map), und greifen Sie auf number_format() oder sprintf() zurück, wenn Sie stattdessen eine kontrollierte numerische Formatierung benötigen.