Ich würde verwenden json_encode($myText). Ich habe festgestellt, dass die vorgeschlagenen Lösungen print_rund (string)vargut für skalare Werte und einfache Objekte funktionieren. Für komplexe Variablen, Klassen oder Objekte, wenn keine vollständige __toString()definiert ist, bevorzuge ich die oben genannten json_encode.
Weitere Details zum Casting und zur Konvertierung von Strings finden Sie im Abschnitt Strings des PHP-Handbuchs, einschließlich der speziellen Behandlung für Boolesche Werte und Nullen.
Object of class Foo could not be converted to string. Gibt es allgemeine Lösungen, die alles (Arrays + Objekte + was auch immer) in einen String konvertieren können?
Hinweis: Dies gibt einen PHP-Hinweis, wenn es auf Arrays verwendet wird.
Dave1010
29
@ MarkAmery Er gab eine Antwort, die implizit die __toString()"magische Methode" nennt , erwähnte dies aber überhaupt nicht. Der Benutzer fragte nach einer Antwort, die der Java- toString()Methode ähnelte, und in PHP ist dies die __toString()Funktion.
Supuhstar
2
@Supuhstar Ah richtig, ich verstehe endlich, woher du kommst. Tut mir leid, wenn ich vorher stumpf war. Ich bin damit einverstanden, dass dies ein relevantes Detail ist, und es wäre wertvoll, es hinzuzufügen, wobei die Antwort möglicherweise in die Abschnitte "Konvertieren von Grundelementen" und "Konvertieren von Objekten" mit Überschriften unterteilt wird.
Mark Amery
309
Dies geschieht mit Typografie:
$strvar =(string) $var;// Casts to string
echo $var;// Will cast to string implicitly
var_dump($var);// Will show the true type of the variable
In einer Klasse können Sie mithilfe der magischen Methode definieren, was ausgegeben wird __toString. Ein Beispiel ist unten:
classBottles{publicfunction __toString(){return'Ninety nine green bottles';}}
$ex =newBottles;
var_dump($ex,(string) $ex);// Returns: instance of Bottles and "Ninety nine green bottles"
"Wenn der Rückgabeparameter TRUE ist, gibt [print_r] eine Zeichenfolge zurück." Da print_r eine gute Möglichkeit ist, Objekte, Arrays (und auch Zahlen / Zeichenfolgen) zu drucken, ist es eine gute Möglichkeit, ein Objekt in eine für Menschen lesbare Zeichenfolge umzuwandeln.
Cedric
1
Zu Ihrer Information Neulinge, der trueTeil ist wichtig! Ich habe verschiedene Methoden zur Konvertierung von Zeichenfolgen ausprobiert, einschließlich print_rund war von allen enttäuscht. Dann habe ich den trueParameter entdeckt (lesen Sie die Dokumentation, warum er funktioniert).
Ripper234
57
Sie können entweder Typografie verwenden:
$var =(string)$varname;
oder StringValue:
$var = strval($varname);
oder SetType:
$success = settype($varname,'string');// $varname itself becomes a string
Sie alle arbeiten in Bezug auf Typ-Jonglieren für dasselbe.
strval ($ varname) macht den Trick für mich, besonders wenn der Wert als Typ "variante" zurückgegeben wird und in string oder int konvertiert werden muss.
Mailand
strval()ist das, wonach ich gesucht habe, weil ich es verwenden wollte array_walk. ZB$array = array('cat',$object); array_walk($array,'strval'); // $array = array('cat',$object->__toString)
Buttle Butkus
33
Wie konvertiere ich den Wert einer PHP-Variablen in einen String?
Ein Wert kann mit der Umwandlung (string) oder der Funktion strval () in einen String konvertiert werden. (Edit: Wie Thomas auch sagte).
Es sollte auch automatisch für Sie umgewandelt werden, wenn Sie es als Zeichenfolge verwenden.
Ruft den Zeichenfolgenwert einer Variablen ab. Weitere Informationen zum Konvertieren in eine Zeichenfolge finden Sie in der Dokumentation zur Zeichenfolge.
Diese Funktion führt keine Formatierung für den zurückgegebenen Wert durch. Wenn Sie nach einer Möglichkeit suchen, einen numerischen Wert als Zeichenfolge zu formatieren, lesen Sie bitte sprintf () oder number_format ().
Dies ist eigentlich sehr hilfreich, da ich alle Zahlen in Strings konvertieren wollte, ohne einen benutzerdefinierten Rückruf zu verwenden. $strings = array_map('strval', $my_numbers);
Peterchaula
Dies ist die einzige Antwort, die mit array_mapCallables im Allgemeinen funktioniert und diese aufzeichnet.
Danon
18
Verwenden Sie für (string)$varGrundelemente diese Variable einfach oder drucken Sie sie sofort aus. PHP ist eine dynamisch typisierte Sprache und die Variable wird im laufenden Betrieb in einen String umgewandelt.
Wenn Sie Objekte in Zeichenfolgen konvertieren möchten, müssen Sie eine __toString()Methode definieren , die eine Zeichenfolge zurückgibt. Diese Methode darf keine Ausnahmen auslösen.
Das funktioniert, aber ich weiß nicht, ob es die Standardmethode in PHP ist.
Antoine Aubry
Es ist eine sehr übliche Art, es in Bash zu
Yauhen Yakimovich
Diese Methode funktioniert, wenn $ myVar ein Objekt der Klasse mit dem Typ __toString oder skalar ist. In anderen Fällen wird ein Fehler generiert.
Zennin
11
Ich denke, es ist erwähnenswert, dass Sie jede Ausgabe (wie ) in einer Variablen abfangen können print_r, var_dumpindem Sie die Ausgabepufferung verwenden:
Es ist erwähnenswert, dass Sie das mit print_r nicht brauchen . Verwenden Sie einfach die Überschreibung, um als Zeichenfolge zurückzukehren.
Ars265
1
Ein besserer Weg wäre, $result = var_export($someVar, true)ohne ob zu verwenden.
Danon
8
Eine weitere Option ist die Verwendung der integrierten Settype- Funktion:
<?php
$foo ="5bar";// string
$bar =true;// boolean
settype($foo,"integer");// $foo is now 5 (integer)
settype($bar,"string");// $bar is now "1" (string)?>
Dies führt im Gegensatz zum Typecasting tatsächlich eine Konvertierung für die Variable durch und ermöglicht Ihnen eine allgemeine Konvertierung in mehrere Typen.
Wenn Sie dem Link zum String Casting-Handbuch folgen, gibt es einen Sonderfall, dessen Verständnis sehr wichtig ist:
(string) cast ist besonders dann vorzuziehen, wenn Ihre Variable $ a ein Objekt ist, da PHP dem Casting- Protokoll gemäß seinem Objektmodell folgt, indem es die magische Methode __toString () aufruft (sofern dies in der Klasse definiert ist, aus der $ a instanziiert wird ).
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, um den Code objektorientierter zu gestalten. IMO ist dies ein schönes Beispiel für Designähnlichkeit (Unterschied) zu anderen OOP-Sprachen wie Java / C # / etc., Dh auf seine eigene spezielle PHP-Art (wann immer es zum Guten oder zum Wert ist).
Wie andere bereits erwähnt haben, benötigen Objekte eine __toStringMethode, um in eine Zeichenfolge umgewandelt zu werden. Ein Objekt, das diese Methode nicht definiert, kann mithilfe der Funktion spl_object_hash weiterhin eine Zeichenfolgendarstellung erstellen .
Diese Funktion gibt eine eindeutige Kennung für das Objekt zurück. Diese ID kann als Hash-Schlüssel zum Speichern von Objekten oder zum Identifizieren eines Objekts verwendet werden, solange das Objekt nicht zerstört wird. Sobald das Objekt zerstört ist, kann sein Hash für andere Objekte wiederverwendet werden.
Ich habe eine Basisobjektklasse mit einer __toStringMethode, die standardmäßig aufruft md5(spl_object_hash($this)), um die Ausgabe eindeutig zu machen, da die Ausgabe von spl_object_hash zwischen Objekten sehr ähnlich aussehen kann.
Dies ist besonders hilfreich beim Debuggen von Code, bei dem eine Variable als Objekt initialisiert wird und später im Code vermutlich in ein anderes Objekt geändert wurde. Durch einfaches Echo der Variablen in das Protokoll kann die Änderung des Objekt-Hashs angezeigt werden (oder nicht).
Einige, wenn nicht alle Methoden in den vorherigen Antworten schlagen fehl, wenn die beabsichtigte Zeichenfolgenvariable eine führende Null hat , z. B. 077543 .
Bei dem Versuch, eine solche Variable zu konvertieren, wird die beabsichtigte Zeichenfolge nicht abgerufen, da die Variable in die Basis 8 (oktal) konvertiert wird .
Dies ist PICNIC (Problem im Stuhl, nicht im Computer), da hier nichts ausfällt ! print 077543;wird ausgegeben 32611, dies ist also der richtige Zeichenfolgenwert von $no. Niemand erwartet, dass (string)+1der String zurückgegeben wird +1(er wird korrekt zurückgegeben 1) oder $no = 1+1; print (string)$no;ausgegeben wird 1+1. Anmerkungen: (1) Gleiches gilt auch für hex ( $no=0xff;). (2) Sie können den Oktalwert zurückerhalten, indem '0'.decoct($no);(3) $no="077543";den führenden Wert 0beibehält, "077543" + 1` gibt, 77544während 077543+1(korrekt) gibt 32612. (PS: nicht herabgestimmt, da dieser Fehler häufig ist)
Tino
4
Ich denke, diese Frage ist etwas irreführend, da toString () in Java nicht nur eine Möglichkeit ist, etwas in einen String umzuwandeln. Das ist es, was Casting über (string) oder String.valueOf () macht, und es funktioniert auch in PHP.
Aber wie gesagt, dies ist Casting und daher nicht das Äquivalent von Java toString ().
toString in Java wandelt nicht nur ein Objekt in einen String um. Stattdessen erhalten Sie die Zeichenfolgendarstellung . Und genau das macht __toString () in PHP.
Was meine ich mit "Geben der String-Darstellung"? Stellen Sie sich eine Klasse für eine Bibliothek mit Millionen von Büchern vor.
Das Umwandeln dieser Klasse in einen String würde (standardmäßig) die Daten, hier alle Bücher, in einen String konvertieren, sodass der String sehr lang und meistens auch nicht sehr nützlich wäre.
Wenn Sie stattdessen auf String setzen, erhalten Sie die String-Darstellung, dh nur den Namen der Bibliothek. Dies ist kürzer und gibt Ihnen daher weniger, aber wichtigere Informationen.
Dies sind beide gültige Ansätze, aber mit sehr unterschiedlichen Zielen. Keiner ist eine perfekte Lösung für jeden Fall, und Sie müssen mit Bedacht auswählen, welcher besser zu Ihren Anforderungen passt.
Klar, es gibt noch mehr Möglichkeiten:
$no =421337// A number in PHP
$str ="$no";// In PHP, stuff inside "" is calculated and variables are replaced
$str = print_r($no,true);// Same as String.format();
$str = settype($no,'string');// Sets $no to the String Type
$str = strval($no);// Get the string value of $no
$str = $no .'';// As you said concatenate an empty string works too
Alle diese Methoden geben einen String zurück, einige verwenden __toString intern und andere schlagen bei Objekten fehl. Weitere Informationen finden Sie in der PHP-Dokumentation .
Doppelte Anführungszeichen sollten ebenfalls funktionieren ... es sollte eine Zeichenfolge erstellt werden, dann sollte der konvertierte STRING-Wert von $ myVar zwischen zwei leeren Zeichenfolgen ANHÄNGEN / EINFÜGEN.
Wenn Sie etwas anderes als einfache Typen wie Ganzzahlen oder Boolesche Werte konvertieren, müssen Sie eine eigene Funktion / Methode für den Typ schreiben, den Sie konvertieren möchten. Andernfalls druckt PHP nur den Typ (z. B. Array, GoogleSniffer) oder Bidet).
PHP wird dynamisch typisiert, so wie Chris Fournier sagte: "Wenn Sie es wie eine Zeichenfolge verwenden, wird es zu einer Zeichenfolge." Wenn Sie mehr Kontrolle über das Format der Zeichenfolge suchen, ist printf Ihre Antwort.
$parent_category_name ="new clothes & shoes";// To make it to string option one
$parent_category = strval($parent_category_name);// Or make it a string by concatenating it with 'new clothes & shoes'// It is useful for database queries
$parent_category ="'". strval($parent_category_name)."'";
Abgestimmt, da ich wirklich keine Ahnung habe, was Sie uns sagen wollen. Die Verwendung strval()von Strings ist nur reine Zeitverschwendung.
Tino
Alter, das Ding geht davon aus, dass Sie einen Zeichenfolgenwert erhalten haben = Wenn es dargestellt wird, wird es "die Zeichenfolge" sein. Aber wenn Sie das in Javascript anzeigen wollen, müssen Sie es "stringx" machen
Daniel Adenew
Dies ist äußerst gefährlich (nicht zu sagen: einfach falsch). Schauen Sie sich bitte stackoverflow.com/q/168214 oder stackoverflow.com/q/23740548 an, um zu verstehen, wie Sie sicher etwas von PHP an JS übergeben können! (Tut mir leid, dass ich ein bisschen offtopisch bin: Die Übergabe einer PHP-Variable an JS war nicht Teil der Frage.)
Tino
0
Für Objekte können Sie den Cast-Operator möglicherweise nicht verwenden. Stattdessen verwende ich die json_encode()Methode.
Im Folgenden wird beispielsweise Inhalt in das Fehlerprotokoll ausgegeben:
Versuchen Sie diesen kleinen seltsamen, aber funktionierenden Ansatz, um den Textteil von stdClass in einen Zeichenfolgentyp zu konvertieren:
$my_std_obj_result = $SomeResponse->return->data;// Specific to object/implementation
$my_string_result = implode ((array)$my_std_obj_result);// Do conversion
print_r(foo, true)
)!json_encode($myText)
. 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, wenn keine vollständige__toString()
definiert ist, bevorzuge ich die oben genanntenjson_encode
.Antworten:
Sie können die Casting-Operatoren verwenden :
Weitere Details zum Casting und zur Konvertierung von Strings finden Sie im Abschnitt Strings des PHP-Handbuchs, einschließlich der speziellen Behandlung für Boolesche Werte und Nullen.
quelle
Object of class Foo could not be converted to string
. Gibt es allgemeine Lösungen, die alles (Arrays + Objekte + was auch immer) in einen String konvertieren können?__toString()
"magische Methode" nennt , erwähnte dies aber überhaupt nicht. Der Benutzer fragte nach einer Antwort, die der Java-toString()
Methode ähnelte, und in PHP ist dies die__toString()
Funktion.Dies geschieht mit Typografie:
In einer Klasse können Sie mithilfe der magischen Methode definieren, was ausgegeben wird
__toString
. Ein Beispiel ist unten:Einige weitere Beispiele für Typguss:
quelle
Verwenden Sie print_r :
Sie können es auch wie folgt verwenden:
Dies setzt
$myText
eine Zeichenfolge wie:Verwenden Sie var_export , um ein bisschen mehr Informationen zu erhalten (mit Variablentypen, ...):
quelle
true
Teil ist wichtig! Ich habe verschiedene Methoden zur Konvertierung von Zeichenfolgen ausprobiert, einschließlichprint_r
und war von allen enttäuscht. Dann habe ich dentrue
Parameter entdeckt (lesen Sie die Dokumentation, warum er funktioniert).Sie können entweder Typografie verwenden:
oder StringValue:
oder SetType:
Sie alle arbeiten in Bezug auf Typ-Jonglieren für dasselbe.
quelle
strval()
ist das, wonach ich gesucht habe, weil ich es verwenden wolltearray_walk
. ZB$array = array('cat',$object); array_walk($array,'strval'); // $array = array('cat',$object->__toString)
Ein Wert kann mit der Umwandlung (string) oder der Funktion strval () in einen String konvertiert werden. (Edit: Wie Thomas auch sagte).
Es sollte auch automatisch für Sie umgewandelt werden, wenn Sie es als Zeichenfolge verwenden.
quelle
Sie suchen strval :
quelle
$strings = array_map('strval', $my_numbers);
array_map
Callables im Allgemeinen funktioniert und diese aufzeichnet.Verwenden Sie für
(string)$var
Grundelemente diese Variable einfach oder drucken Sie sie sofort aus. PHP ist eine dynamisch typisierte Sprache und die Variable wird im laufenden Betrieb in einen String umgewandelt.Wenn Sie Objekte in Zeichenfolgen konvertieren möchten, müssen Sie eine
__toString()
Methode definieren , die eine Zeichenfolge zurückgibt. Diese Methode darf keine Ausnahmen auslösen.quelle
Es sollte funktionieren, wenn Sie es in doppelte Anführungszeichen setzen:
quelle
Ich denke, es ist erwähnenswert, dass Sie jede Ausgabe (wie ) in einer Variablen abfangen können
print_r
,var_dump
indem Sie die Ausgabepufferung verwenden:Dank an: Wie kann ich das Ergebnis von var_dump in einem String erfassen?
quelle
$result = var_export($someVar, true)
ohne ob zu verwenden.Eine weitere Option ist die Verwendung der integrierten Settype- Funktion:
Dies führt im Gegensatz zum Typecasting tatsächlich eine Konvertierung für die Variable durch und ermöglicht Ihnen eine allgemeine Konvertierung in mehrere Typen.
quelle
Zusätzlich zu der Antwort von Thomas G. Mayfield:
Wenn Sie dem Link zum String Casting-Handbuch folgen, gibt es einen Sonderfall, dessen Verständnis sehr wichtig ist:
(string) cast ist besonders dann vorzuziehen, wenn Ihre Variable $ a ein Objekt ist, da PHP dem Casting- Protokoll gemäß seinem Objektmodell folgt, indem es die magische Methode __toString () aufruft (sofern dies in der Klasse definiert ist, aus der $ a instanziiert wird ).
PHP macht etwas ähnliches wie
Die (String-) Casting-Operation ist eine empfohlene Technik für die PHP5 + -Programmierung, um den Code objektorientierter zu gestalten. IMO ist dies ein schönes Beispiel für Designähnlichkeit (Unterschied) zu anderen OOP-Sprachen wie Java / C # / etc., Dh auf seine eigene spezielle PHP-Art (wann immer es zum Guten oder zum Wert ist).
quelle
Wie andere bereits erwähnt haben, benötigen Objekte eine
__toString
Methode, um in eine Zeichenfolge umgewandelt zu werden. Ein Objekt, das diese Methode nicht definiert, kann mithilfe der Funktion spl_object_hash weiterhin eine Zeichenfolgendarstellung erstellen .Ich habe eine Basisobjektklasse mit einer
__toString
Methode, die standardmäßig aufruftmd5(spl_object_hash($this))
, um die Ausgabe eindeutig zu machen, da die Ausgabe von spl_object_hash zwischen Objekten sehr ähnlich aussehen kann.Dies ist besonders hilfreich beim Debuggen von Code, bei dem eine Variable als Objekt initialisiert wird und später im Code vermutlich in ein anderes Objekt geändert wurde. Durch einfaches Echo der Variablen in das Protokoll kann die Änderung des Objekt-Hashs angezeigt werden (oder nicht).
quelle
Einige, wenn nicht alle Methoden in den vorherigen Antworten schlagen fehl, wenn die beabsichtigte Zeichenfolgenvariable eine führende Null hat , z. B. 077543 .
Bei dem Versuch, eine solche Variable zu konvertieren, wird die beabsichtigte Zeichenfolge nicht abgerufen, da die Variable in die Basis 8 (oktal) konvertiert wird .
Alle diese
$str
haben einen Wert von 32611 :quelle
print 077543;
wird ausgegeben32611
, dies ist also der richtige Zeichenfolgenwert von$no
. Niemand erwartet, dass(string)+1
der String zurückgegeben wird+1
(er wird korrekt zurückgegeben1
) oder$no = 1+1; print (string)$no;
ausgegeben wird1+1
. Anmerkungen: (1) Gleiches gilt auch für hex ($no=0xff;
). (2) Sie können den Oktalwert zurückerhalten, indem'0'.decoct($no);
(3)$no="077543";
den führenden Wert0
beibehält, "077543" + 1` gibt,77544
während077543+1
(korrekt) gibt32612
. (PS: nicht herabgestimmt, da dieser Fehler häufig ist)Ich denke, diese Frage ist etwas irreführend, da toString () in Java nicht nur eine Möglichkeit ist, etwas in einen String umzuwandeln. Das ist es, was Casting über (string) oder String.valueOf () macht, und es funktioniert auch in PHP.
Beachten Sie, dass dies problematisch sein kann, da Java typsicher ist ( weitere Informationen finden Sie hier ).
Aber wie gesagt, dies ist Casting und daher nicht das Äquivalent von Java toString ().
toString in Java wandelt nicht nur ein Objekt in einen String um. Stattdessen erhalten Sie die Zeichenfolgendarstellung . Und genau das macht __toString () in PHP.
Und von der anderen Seite:
Was meine ich mit "Geben der String-Darstellung"? Stellen Sie sich eine Klasse für eine Bibliothek mit Millionen von Büchern vor.
Dies sind beide gültige Ansätze, aber mit sehr unterschiedlichen Zielen. Keiner ist eine perfekte Lösung für jeden Fall, und Sie müssen mit Bedacht auswählen, welcher besser zu Ihren Anforderungen passt.
Klar, es gibt noch mehr Möglichkeiten:
Alle diese Methoden geben einen String zurück, einige verwenden __toString intern und andere schlagen bei Objekten fehl. Weitere Informationen finden Sie in der PHP-Dokumentation .
quelle
Die Dokumentation besagt, dass Sie auch Folgendes tun können:
Es ist das gleiche wie bei der Besetzung, aber ich denke, es sieht hübscher aus.
Quelle:
quelle
Doppelte Anführungszeichen sollten ebenfalls funktionieren ... es sollte eine Zeichenfolge erstellt werden, dann sollte der konvertierte STRING-Wert von $ myVar zwischen zwei leeren Zeichenfolgen ANHÄNGEN / EINFÜGEN.
quelle
Sie können jederzeit eine Methode mit dem Namen .ToString ($ in) erstellen, die zurückgegeben wird
quelle
Wenn Sie etwas anderes als einfache Typen wie Ganzzahlen oder Boolesche Werte konvertieren, müssen Sie eine eigene Funktion / Methode für den Typ schreiben, den Sie konvertieren möchten. Andernfalls druckt PHP nur den Typ (z. B. Array, GoogleSniffer) oder Bidet).
quelle
PHP wird dynamisch typisiert, so wie Chris Fournier sagte: "Wenn Sie es wie eine Zeichenfolge verwenden, wird es zu einer Zeichenfolge." Wenn Sie mehr Kontrolle über das Format der Zeichenfolge suchen, ist printf Ihre Antwort.
quelle
Sie können auch die PHP-Funktion var_export verwenden.
quelle
quelle
strval()
von Strings ist nur reine Zeitverschwendung.Für Objekte können Sie den Cast-Operator möglicherweise nicht verwenden. Stattdessen verwende ich die
json_encode()
Methode.Im Folgenden wird beispielsweise Inhalt in das Fehlerprotokoll ausgegeben:
quelle
Versuchen Sie diesen kleinen seltsamen, aber funktionierenden Ansatz, um den Textteil von stdClass in einen Zeichenfolgentyp zu konvertieren:
quelle
Ich benutze variableToString . Es behandelt jeden PHP-Typ und ist flexibel (Sie können es erweitern, wenn Sie möchten).
quelle