567 Stimmen

PHP-Äquivalent zu .NET/Java's toString()

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

Ich suchte nach etwas Besserem als der Verkettung mit einer leeren Zeichenfolge:

$myText = $myVar . '';

Wie die ToString() Methode in Java oder .NET.

7voto

Xanlantos Punkte 777

Ich denke, diese Frage ist ein wenig irreführend, denn, toString() in Java ist nicht nur ein Weg, um etwas in einen String zu verwandeln. Das ist es, was Gießen via (string) oder String.valueOf() tut, und es funktioniert auch in PHP.

// Java
String myText = (string) myVar;

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

Beachten Sie, dass dies problematisch sein kann, da Java typsicher ist ( siehe hier für weitere Details ).

Aber wie gesagt, das ist Casting und daher nicht das Äquivalent zu Javas toString().

toString in Java nicht einfach ein Objekt in einen String umwandelt. Stattdessen erhalten Sie die String-Darstellung . Und das ist es, 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:

// Java
new SomeClass().toString(); // "Some string representation"

// PHP
strval(new SomeClass); // "Some string representation"

Was meine ich mit "die String-Darstellung geben"? Stellen Sie sich eine Klasse für eine Bibliothek mit Millionen von Büchern vor.

  • Ein Casting dieser Klasse in eine Zeichenkette würde (standardmäßig) die Daten, hier alle Bücher, in eine Zeichenkette umwandeln, so dass die Zeichenkette sehr lang und meistens auch nicht sehr nützlich wäre.
  • To String gibt Ihnen stattdessen die String-Darstellung, d. h. nur den Namen der Bibliothek. Dies ist kürzer und gibt Ihnen daher weniger, aber wichtigere Informationen.

Beides sind valide Ansätze, aber mit sehr unterschiedlichen Zielen. Keiner von beiden ist eine perfekte Lösung für jeden Fall, und Sie müssen klug entscheiden, welcher Ansatz für Ihre Bedürfnisse besser geeignet ist.

Sicher, 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, wobei einige von ihnen intern __toString verwenden und einige andere an Objekten scheitern. Werfen Sie einen Blick auf die PHP-Dokumentation für weitere Einzelheiten.

7voto

Justin Weeks Punkte 360

Eine andere Möglichkeit ist die Verwendung des eingebauten 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 zur Typisierung tatsächlich eine Konvertierung der Variablen durch und ermöglicht es Ihnen, eine allgemeine Methode zur Konvertierung in mehrere Typen zu verwenden.

7voto

Yauhen Yakimovich Punkte 12897

Zusätzlich zu der von Thomas G. Mayfield gegebenen Antwort:

Wenn Sie dem Link zum String Casting Manual folgen, gibt es einen Sonderfall, der sehr wichtig zu verstehen ist:

(string) ist vorzuziehen, insbesondere wenn Ihre Variable $a ein Objekt ist, denn PHP folgt dem Casting Protokoll entsprechend seinem Objektmodell durch den Aufruf __toString() magische Methode (falls eine solche in der Klasse definiert ist, von der $a instanziert 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'));
    }
}

El (Zeichenfolge) Casting-Operation ist eine empfohlene Technik für die PHP5+ Programmierung, die den Code objektorientierter macht. IMO ist dies ein schönes Beispiel für die Ähnlichkeit (oder den Unterschied) des Designs zu anderen OOP-Sprachen wie Java/C#/etc., d.h. auf seine eigene, spezielle PHP-Art (wann immer es zum Guten oder zum Schlechten ist).

6voto

user1587439 Punkte 1629

Einige, wenn nicht alle, der Methoden in den vorherigen Antworten schlagen fehl, wenn die beabsichtigte String-Variable ein führende Null zum Beispiel, 077543 .

Der Versuch, eine solche Variable zu konvertieren, schlägt fehl, da die Variable in Basis 8 (oktal) .

All dies wird die $str haben einen Wert von 32611 :

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

3voto

DarthKotik Punkte 43

In der Dokumentation steht, dass Sie das auch tun können:

$str = "$foo";

Es ist dasselbe wie der Gips, aber ich finde, es sieht schöner aus.

Quelle:

CodeJaeger.com

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.

Powered by:

X