0

今まで使用していた 5.2 の代わりに php 5.1 を使用していたため、新しい Web ホストに移動しました。それがphpのバージョンなのか設定の問題なのかはまだわかりません。

現在、__toString 関数を持つクラスのほとんど (またはすべて) は、"Object ID #" (php4 のように) に変換されますが、すべてが正しい値を返す前です。

どうすればこれを修正できますか?

4

2 に答える 2

4

どうやら PHP 5.2 より前では、このメソッドは特定の状況 (および など)__toStringでのみ「魔法のように」呼び出されていました。したがって、現在、直接出力関数以外の「魔法の」方法で使用している場合、期待どおりに機能しません。echo()print()__toString()

出典

PHP 5.2.0 より前では、このメソッドはor__toStringと直接結合された場合にのみ呼び出されたことに注意してください。PHP 5.2.0 以降、任意の文字列コンテキスト (修飾子付き など) で呼び出されますが、他のタイプのコンテキスト (修飾子付きなど) では呼び出されません。PHP 5.2.0 以降、メソッドのないオブジェクトを文字列に変換すると、 .echo()print()printf()%s%d__toStringE_RECOVERABLE_ERROR

于 2009-06-02T18:51:57.443 に答える
1

一部のホスト企業 (1and1 など) は、PHP 4.x と 5.x の両方を実行し、デフォルトで 4.x を使用しています。正しいバージョンの PHP を使用していることを確認する .htaccess ファイルが必要になる場合があります。

また、ドキュメントによると、マジック __toString() はバージョン 5.2+ とは若干異なります。

PHP 5.2.0 より前では、__toString メソッドは直接 echo() または print() と組み合わせた場合にのみ呼び出されたことに注意してください。PHP 5.2.0 以降、任意の文字列コンテキスト (例: %s 修飾子付きの printf()) で呼び出されますが、他のタイプのコンテキスト (例: %d 修飾子付き) では呼び出されません。PHP 5.2.0 以降、__toString メソッドを持たないオブジェクトを文字列に変換すると、E_RECOVERABLE_ERROR が発生していました。

したがって、出力の呼び出し方法に依存する場合があります。

于 2009-06-02T18:55:51.493 に答える