Я думаю, что этот вопрос немного вводит в заблуждение, поскольку 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, т. Е. Только имя библиотеки. Это короче и поэтому дает вам меньше, но более важную информацию.
Это оба правильные подходы, но с совершенно разными целями, ни одно из них не является идеальным решением для каждого случая, и вам нужно выбирать мудро, который лучше соответствует вашим потребностям.
Конечно, есть еще больше вариантов:
$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)
)!