「オブジェクト ID #..」を取得するのではなく、暗黙的に文字列に変換します。
質問
これまで使用していた php 5.2 ではなく 5.1 を使用しているため、新しいウェブホストに移行しました。それがPHPのバージョンなのか設定の問題なのかはまだ分かりません。
現時点では、__toString 関数を持つクラスのほとんど (またはすべて) が (php4 のように) 「オブジェクト ID #」 に変換されますが、すべてが正しい値を返す前に。
これを修正するにはどうすればよいですか?
解決
PHP 5.2に明らか前__toString
方法は、特定の状況(例えばecho()
とprint()
)で呼び出さのみ「魔法」でした。あなたは現在、ダイレクト出力機能の外に「魔法」のように__toString()
を使用しているのであれば、それは期待通りに動作しません。
これは、PHPの前のことを注目する価値があります それが直接結合したとき
__toString
メソッドが呼ばれただけ5.2.0echo()
またはprint()
と。 PHPので、 5.2.0、それは(例えばprintf()
と%s
に任意の文字列のコンテキストで呼び出され 修飾子)ではなく、他のタイプで コンテキスト(例えば%d
改質剤を有します)。 PHP 5.2.0以降、変換オブジェクト 文字列に__toString
方法なしE_RECOVERABLE_ERROR
を引き起こすます。
他のヒント
一部のホスト企業 (1and1 など) は PHP 4.x と 5.x の両方を実行し、デフォルトは 4.x です。正しいバージョンの PHP を使用していることを確認する .htaccess ファイルが必要になる場合があります。
また、マジック __toString() は、バージョン 5.2 以降とは若干異なります。 ドキュメンテーション:
PHP 5.2.0 より前では、__toString メソッドは echo() または print() と直接結合された場合にのみ呼び出されることに注意してください。PHP 5.2.0 以降、任意の文字列コンテキスト (例:printf() では %s 修飾子を使用します) が、他のタイプのコンテキストではそうではありません (例:%d 修飾子を使用)。PHP 5.2.0 以降、__toString メソッドを使用しないオブジェクトを文字列に変換すると、E_RECOVERABLE_ERROR が発生します。
したがって、出力の呼び出し方法に依存する可能性があります。