Wie konvertiere ich den Wert einer PHP-Variablen in einen String?
Ich habe nach etwas Besserem gesucht als der Konkatenation mit einem leeren String:
$myText = $myVar . '';
Ähnlich der ToString()
Methode in Java oder .NET.
Wie konvertiere ich den Wert einer PHP-Variablen in einen String?
Ich habe nach etwas Besserem gesucht als der Konkatenation mit einem leeren String:
$myText = $myVar . '';
Ähnlich der ToString()
Methode in Java oder .NET.
Ich denke, diese Frage ist ein wenig irreführend, da toString() in Java nicht nur eine Möglichkeit ist, etwas in einen String zu casten. Das ist das, was Casting über (string) tut, und das funktioniert auch in PHP.
// Java
String myText = (string) myVar;
// PHP
$myText = (string) $myVar;
Beachten Sie, dass dies problematisch sein kann, da Java typsicher ist (hier finden Sie weitere Details).
Aber wie gesagt, dies ist Casting und daher nicht das Äquivalent zu Java's toString().
toString in Java wandelt nicht einfach ein Objekt in einen String um. Stattdessen liefert es die String-Repräsentation. Und das ist das, was __toString() in PHP tut.
// Java
class SomeClass{
public String toString(){
return "some string representation";
}
}
// PHP
class SomeClass{
public function __toString()
{
return "some string representation";
}
}
Und von der anderen Seite aus:
// Java
new SomeClass().toString(); // "Some string representation"
// PHP
strval(new SomeClass); // "Some string representation"
Was meine ich mit "die String-Repräsentation geben"? Stellen Sie sich eine Klasse für eine Bibliothek mit Millionen von Büchern vor.
Beide Ansätze sind gültig, aber mit sehr unterschiedlichen Zielen. Keiner ist eine perfekte Lösung für jeden Fall, und Sie müssen weise wählen, welcher besser zu Ihren Bedürfnissen passt.
Sicher, es gibt noch mehr Optionen:
$no = 421337 // Eine Nummer in PHP
$str = "$no"; // In PHP wird der Inhalt von "" berechnet und Variablen werden ersetzt
$str = print_r($no, true); // Gleich wie String.format();
$str = settype($no, 'string'); // Setzt $no auf den String-Typ
$str = strval($no); // Holt den String-Wert von $no
$str = $no . ''; // Wie Sie gesagt haben, funktioniert auch die Verkettung mit einem leeren String
All diese Methoden geben einen String zurück, einige von ihnen verwenden intern __toString und einige andere werden bei Objekten scheitern. Werfen Sie einen Blick auf die PHP-Dokumentation für weitere Details.
Eine weitere Möglichkeit besteht darin, die integrierte settype Funktion zu verwenden:
Dies führt tatsächlich eine Konvertierung der Variablen durch, im Gegensatz zum Typcasting, und ermöglicht es Ihnen, eine allgemeine Möglichkeit zur Konvertierung in verschiedene Typen zu haben.
Abgesehen von der Antwort von Thomas G. Mayfield:
Wenn Sie dem Link zum String-Casting-Handbuch folgen, gibt es einen besonderen Fall, den es zu verstehen gilt:
(string) Cast ist besonders empfehlenswert, insbesondere wenn Ihre Variable $a ein Objekt ist, da PHP das Casting-Protokoll gemäß seinem Objektmodell befolgt, indem es die __toString() Magie-Methode aufruft (falls diese in der Klasse definiert ist, von der $a instanziiert ist).
PHP macht etwas Ähnliches wie
function castToString($instance)
{
if (is_object($instance) && method_exists($instance, '__toString')) {
return call_user_func_array(array($instance, '__toString'));
}
}
Die (string) Casting-Operation ist eine empfohlene Technik für die PHP5+ Programmierung, die den Code objektorientierter macht. Meiner Meinung nach ist dies ein schönes Beispiel für Designähnlichkeit (Unterschied) zu anderen OOP-Sprachen wie Java/C# usw., d.h. auf seine eigene spezielle PHP-Weise (ob es gut ist oder nicht).
Einige, wenn nicht alle, der Methoden in den vorherigen Antworten scheitern, wenn die beabsichtigte Zeichenfolgenvaiable eine führende Null hat, zum Beispiel 077543.
Ein Versuch, eine solche Variable umzuwandeln, führt nicht zur beabsichtigten Zeichenfolge, da die Variable in Basis 8 (Oktal) umgewandelt wird.
All diese werden dazu führen, dass $str
den Wert 32611 hat:
$no = 077543
$str = (string)$no;
$str = "$no";
$str = print_r($no,true);
$str = strval($no);
$str = settype($no, "integer");
Dies ist ein Picknick (Problem im Stuhl, nicht im Computer), da hier nichts schiefgeht! print 077543;
gibt 32611
aus, also ist dies der richtige Zeichenfolgenwert von $no
. Niemand erwartet, dass (string)+1
die Zeichenfolge +1
zurückgibt (es gibt korrekt 1
zurück) noch dass $no = 1+1; print (string)$no;
1+1
ausgibt. Anmerkungen: (1) Gleiches gilt für hex ($no=0xff;
). (2) Du kannst den oktalen Wert mit '0'.decoct($no);
zurückbekommen. (3) $no="077543";
behält die führende 0
, "077543"+1` ergibt 77544
, während 077543+1
(korrekt) 32612
ergibt. (PS: nicht heruntergestimmt, da dieser Fehler üblich ist)
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.
3 Stimmen
Ich würde
json_encode($myText)
verwenden. Ich habe festgestellt, dass die vorgeschlagenen Lösungenprint_r
und(string)var
gut für skalare Werte und einfache Objekte funktionieren. Für komplexe Variablen, Klassen oder Objekte ziehe ich, wenn ein vollständiges__toString()
nicht definiert ist,json_encode
vor.