Frage

Wie konvertiere ich den Wert einer PHP-Variablen in einen String?

Ich habe nach etwas Besserem gesucht, als mit einer leeren Zeichenfolge zu verketten:

$myText = $myVar . '';

Wie ToString() Methode in Java oder .NET.

War es hilfreich?

Lösung

Du kannst den ... benutzen Casting-Operatoren:

$myText = (string)$myVar;

Weitere Details zum Saitengießen und -konvertieren finden Sie im Abschnitt „Strings“. des PHP-Handbuchs, einschließlich spezieller Behandlung für Boolesche Werte und Nullen.

Andere Tipps

Dies geschieht mit Typumwandlung:

$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:

class Bottles {
    public function __toString()
    {
        return 'Ninety nine green bottles';
    }
}

$ex = new Bottles;
var_dump($ex, (string) $ex);
// Returns: instance of Bottles and "Ninety nine green bottles"

Einige weitere Beispiele für Typ-Casting:

$i = 1;

// int 1
var_dump((int) $i);

// bool true
var_dump((bool) $i);

// string "1"
var_dump((string) 1);

Verwenden print_r:

$myText = print_r($myVar,true);

Sie können auch „Gefällt mir“ verwenden

$myText = print_r($myVar,true)."foo bar";

das wird eingestellt $myText zu einer Zeichenfolge, wie:

array (
  0 => '11',
)foo bar

Verwenden var_export um ein bisschen mehr Informationen zu bekommen (mit Variablentypen,...):

$myText = var_export($myVar,true);

Sie können entweder Typecasting verwenden:

$var = (string)$varname;

oder StringValue:

$var = strval($varname);

oder SetType:

$success = settype($varname, 'string');
// $varname itself becomes a string

In Bezug auf das Typen-Jonglieren arbeiten sie alle für dasselbe.

Wie konvertiere ich den Wert einer PHP -Variablen in Zeichenfolge?

Ein Wert kann mit in einen String umgewandelt werden (String-)Besetzung oder der strval() Funktion.(Bearbeiten:Als Thomas auch angegeben).

Es sollte auch automatisch für Sie gecastet werden, wenn Sie es als Zeichenfolge verwenden.

Du suchst nach strval:

string strval ( mixed $var )

Rufen Sie den Zeichenfolgenwert einer Variablen ab.Weitere Informationen zum Konvertieren in die String finden Sie in der Dokumentation zu String.

Diese Funktion führt keine Formatierung des zurückgegebenen Werts durch.Wenn Sie nach einer Möglichkeit suchen, einen numerischen Wert als Zeichenfolge zu formatieren, siehe Sprintf () oder Number_Format ().

Für Grundelemente einfach verwenden (string)$var oder drucken Sie diese Variable gleich aus.PHP ist eine dynamisch typisierte Sprache und Variablen werden im laufenden Betrieb in einen String umgewandelt.

Wenn Sie Objekte in Zeichenfolgen konvertieren möchten, müssen Sie diese definieren __toString() Methode, die einen String zurückgibt.Diese Methode darf keine Ausnahmen auslösen.

Es sollte funktionieren, es in doppelte Anführungszeichen zu setzen:

$myText = "$myVar";

Ich denke, es ist erwähnenswert, dass man jede Ausgabe abfangen kann (z print_r, var_dump) in einer Variablen mithilfe der Ausgabepufferung:

<?php
ob_start();
var_dump($someVar);
$result = ob_get_clean();
?>

Dank an:https://stackoverflow.com/a/139491/987864

Eine andere Möglichkeit besteht darin, das eingebaute zu verwenden Settyp 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 zur Typumwandlung tatsächlich eine Konvertierung der Variablen durch und ermöglicht Ihnen eine allgemeine Konvertierung in mehrere Typen.

Zusätzlich zur Antwort von Thomas G.Mayfield:

Wenn Sie dem Link zur Anleitung zum Saitengießen folgen, gibt es einen Sonderfall, den Sie unbedingt verstehen sollten:

(String-)Cast ist vorzuziehen, insbesondere wenn es sich um eine Variable handelt $a ist ein Objekt, da PHP dem Casting folgen wird Protokoll entsprechend seinem Objektmodell durch Aufruf __toString() magische Methode (sofern diese in der Klasse definiert ist, von der $a instanziiert wird).

PHP macht etwas Ähnliches

function castToString($instance) 
{ 
    if (is_object($instance) && method_exists($instance, '__toString')) {
        return call_user_func_array(array($instance, '__toString'));
    }
}

Der (Zeichenfolge) Der Casting-Vorgang ist eine empfohlene Technik für die PHP5+-Programmierung, um Code objektorientierter zu machen.Meiner Meinung nach ist dies ein schönes Beispiel für Designähnlichkeit (Unterschied) zu anderen OOP-Sprachen wie Java/C#/etc., d. h.auf seine eigene spezielle PHP-Art (wann immer es zum Guten oder zum Nutzen ist).

Wie andere bereits erwähnt haben, benötigen Objekte eine __toString Methode, die in einen String umgewandelt werden soll.Ein Objekt, das diese Methode nicht definiert, kann dennoch eine Zeichenfolgendarstellung mit erzeugen spl_object_hash Funktion.

Diese Funktion gibt eine eindeutige Kennung für das Objekt zurück.Diese ID kann als Hash-Schlüssel zum Speichern von Objekten oder zur Identifizierung 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 a __toString Methode, die standardmäßig aufruft md5(spl_object_hash($this)) um die Ausgabe eindeutig 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 vermutet wird, dass sie sich in ein anderes Objekt geändert hat.Durch einfaches Echo der Variablen in das Protokoll kann die Änderung gegenüber dem Objekt-Hash aufgedeckt werden (oder auch nicht).

Einige, wenn nicht alle der oben genannten Methoden schlagen fehl, wenn die beabsichtigte Zeichenfolgenvariable eine führende Null hat also 077543Ein Versuch, eine solche Variable zu konvertieren, schlägt fehl, die beabsichtigte Zeichenfolge abzurufen, da die Variable in konvertiert wird Basis 8 (oktal).

All dies wird es schaffen $str einen Wert von haben 32611

$no = 077543  
$str = (string)$no;   
$str = "$no";   
$str = print_r($no,true);  
$str = strval($no);   
$str = settype($no, "integer");  

In der Dokumentation heißt es, dass Sie auch Folgendes tun können:

$str = "$foo";

Es ist das gleiche wie beim Guss, aber ich finde, es sieht hübscher aus.

Quelle:

Ich denke Gießen via (string) oder String.valueOf() funktioniert und es funktioniert genauso gut in PHP.

//Java
String myText = (string) myVar;
//PHP
$myText = (string) $myVar;

Beachten Sie, dass dies problematisch sein kann, da Java typsicher ist. Weitere Einzelheiten finden Sie hier

Aber wie gesagt, das ist Casting und daher nicht das Äquivalent von Javas toString().toString in Java wandelt ein Objekt nicht einfach in einen String um, sondern gibt Ihnen stattdessen die String-Darstellung.Und das ist was __toString() in PHP tut es

//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:

//Java
new SomeClass().toString();//'some string representation'
//PHP
strval(new SomeClass);//'some string representation'

Was meine ich mit „Angeben 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.
  • Mit String insted erhalten Sie die String-Darstellung, d. h.nur der Name der Bibliothek.Dies ist kürzer und bietet Ihnen daher weniger, dafür aber wichtigere Informationen.

Dies sind beides gültige Ansätze, aber mit sehr unterschiedlichen Zielen ist geneigter eine perfekte Lösung für jeden Fall und Sie müssen mit Bedacht wählen, was besser zu Ihren Bedürfnissen passt.

Natürlich gibt es 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 concat an empty string works too

Alle diese Methoden geben einen String zurück, einige verwenden intern __toString, andere schlagen bei Objcts fehl. Schauen Sie sich das an PHP-Dokumentation für mehr Details.

Doppelte Anführungszeichen sollten auch funktionieren ...Es sollte eine Zeichenfolge erstellen und dann den umgewandelten STRING-Wert von $myVar zwischen zwei leere Zeichenfolgen ANHÄNGEN/EINFÜGEN.

Sie können jederzeit eine Methode namens .ToString($in) erstellen, die zurückgibt

$in . '';  

Wenn Sie etwas anderes als einfache Typen wie Ganzzahlen oder Boolesche Werte konvertieren, müssen Sie Ihre eigene Funktion/Methode für den Typ schreiben, den Sie konvertieren möchten. Andernfalls gibt PHP nur den Typ aus (z. B. Array, GoogleSniffer). , oder Bidet).

PHP ist dynamisch typisiert, also wie Chris Fournier sagte: „Wenn Sie es wie einen String verwenden, wird es zu einem String.“Wenn Sie mehr Kontrolle über das Format der Zeichenfolge wünschen, dann printf ist deine Antwort.

Sie können auch Folgendes verwenden: var_export PHP-Funktion.

$parent_category_name = "new clothes & shoes" ;
//TO make it to string option one
$parent_category = strval($parent_category_name);
//Or make it string my concatenating it with 'new clothes & shoes' 
//useful for database queries
$parent_category = "'".strval($parent_category_name)."'";

Für Objekte können Sie den Cast-Operator möglicherweise nicht verwenden.Stattdessen verwende ich die json_encode() Methode.

Folgendes gibt beispielsweise Inhalte in das Fehlerprotokoll aus:

error_log(json_encode($args));

Probieren Sie diesen etwas seltsamen, aber funktionierenden Ansatz aus, um den Textteil von stdClass in einen String-Typ zu konvertieren:

$my_std_obj_result = $SomeResponse->return->data; //specific to object/implementation

$my_string_result = implode ((array)$my_std_obj_result); //do conversion

Ich verwende variableToString

https://github.com/lingtalfi/VariableToString

Es verarbeitet jeden PHP-Typ und ist flexibel (Sie können es erweitern, wenn Sie möchten)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top