ฉันคิดว่าคำถามนี้ทำให้เข้าใจผิดเล็กน้อยเนื่องจาก toString () ใน Java ไม่ได้เป็นเพียงวิธีที่จะส่งบางสิ่งไปยัง String นั่นคือสิ่งที่ส่งผ่านทาง (สตริง) หรือ String.valueOf () และมันทำงานได้ดีใน PHP
// Java
String myText = (string) myVar;
// PHP
$myText = (string) $myVar;
โปรดทราบว่านี่อาจเป็นปัญหาได้เนื่องจาก Java ปลอดภัยสำหรับประเภท ( ดูรายละเอียดเพิ่มเติมที่นี่ )
แต่อย่างที่บอกว่านี่เป็นการคัดเลือกนักแสดงดังนั้นจึงไม่เท่ากับ toString () ของ Java
toString ใน Java ไม่เพียง แต่โยนวัตถุไปยัง String มันแทนจะทำให้คุณเป็นตัวแทนสตริง และนั่นคือสิ่งที่__toString ()ใน PHP ทำ
// Java
class SomeClass{
public String toString(){
return "some string representation";
}
}
// PHP
class SomeClass{
public function __toString()
{
return "some string representation";
}
}
และจากอีกด้านหนึ่ง:
// Java
new SomeClass().toString(); // "Some string representation"
// PHP
strval(new SomeClass); // "Some string representation"
ฉันหมายถึงอะไรโดย "ให้การเป็นตัวแทนสตริง"? ลองนึกภาพชั้นเรียนสำหรับห้องสมุดที่มีหนังสือหลายล้านเล่ม
- การคัดเลือกคลาสนั้นให้เป็นสตริง (โดยค่าเริ่มต้น) จะแปลงข้อมูลที่นี่หนังสือทั้งหมดให้เป็นสตริงดังนั้นสตริงจะยาวมากและส่วนใหญ่ไม่มีประโยชน์มากเช่นกัน
- ถึง String แทนจะให้การแทนค่าสตริงให้คุณเช่นเฉพาะชื่อของไลบรารี สิ่งนี้สั้นกว่าและให้ข้อมูลน้อยลง แต่สำคัญกว่า
เหล่านี้เป็นวิธีการที่ถูกต้อง แต่มีเป้าหมายที่แตกต่างกันมากไม่เป็นโซลูชั่นที่สมบูรณ์แบบสำหรับทุกกรณีและคุณต้องเลือกอย่างชาญฉลาดซึ่งเหมาะกับความต้องการของคุณ
แน่นอนว่ามีตัวเลือกมากขึ้น:
$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
เมธอดเหล่านี้ทั้งหมดจะคืนค่าสตริงบางตัวใช้ __toString เป็นการภายในและบางอันจะล้มเหลวบนออบเจ็กต์ ดูรายละเอียดเพิ่มเติมในเอกสาร PHP
print_r(foo, true)
)!