JavaのtoString()は何かを文字列にキャストする方法ではないので、この質問は少し誤解を招くと思います。これは、(string)またはString.valueOf()を介したキャストが行うことであり、PHPでも同様に機能します。
// Java
String myText = (string) myVar;
// PHP
$myText = (string) $myVar;
Javaはタイプセーフであるため、これは問題になる可能性があることに注意してください(詳細については、こちらを参照してください)。
しかし、すでに述べたように、これはキャストであるため、JavaのtoString()と同等ではありません。
JavaのtoStringは、オブジェクトをStringにキャストするだけではありません。代わりに、文字列表現を提供します。そして、それがPHPの__toString()が行うことです。
// 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"
「文字列表現を与える」とはどういう意味ですか?何百万もの本がある図書館のクラスを想像してみてください。
- そのクラスを文字列にキャストすると、(デフォルトでは)データ(ここではすべての本)が文字列に変換されるため、文字列は非常に長くなり、ほとんどの場合あまり役に立ちません。
- 代わりに、文字列にすると、文字列表現、つまり、ライブラリの名前のみが提供されます。これは短いため、提供される情報は少なくなりますが、より重要です。
これらはどちらも有効なアプローチですが、目的が大きく異なるため、すべてのケースに最適なソリューションではありません。ニーズに合った方法を賢く選択する必要があります。
もちろん、さらに多くのオプションがあります。
$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
これらのメソッドはすべてStringを返します。一部は内部で__toStringを使用し、一部はObjectで失敗します。詳細については、PHPのドキュメントをご覧ください。
print_r(foo, true)
)!