Я думаю, що це питання трохи вводить в оману, оскільки toString () на Java - це не просто спосіб передавати щось до String. Це те, що робить кастинг через (string) або String.valueOf (), і це добре працює в PHP.
// Java
String myText = (string) myVar;
// PHP
$myText = (string) $myVar;
Зверніть увагу, що це може бути проблематично, оскільки Java є безпечною для типу (детальніше див. Тут ).
Але, як я вже сказав, це кастинг, а отже, не еквівалент toString () Java.
toString в Java не просто кидає об'єкт у String. Натомість це дасть вам представлення 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 (за замовчуванням) перетворить дані, тут усі книги, у рядок, так що String був би дуже довгим і в більшості випадків не дуже корисним.
- Натомість String дасть вам представлення 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)
)!