2009-06-02 1 views
0

これまで使用していた5.2の代わりにphp 5.1を持っていました。私はまだそれがPHPのバージョンや設定の問題であるかどうかはわかりません。"Object ID#.."を取得する代わりに、文字列への暗黙的な変換

__toString関数を持つクラスの大部分(またはすべて)は、(php4のように)「Object ID#」に変換されますが、すべてが正しい値を返す前に変換されます。

どうすればこの問題を解決できますか?どうやら前PHP 5.2に__toString方法のみ「魔法」、特定の状況(例えばecho()print())で呼び出された

+0

あなたは問題をもう少し明確にすることができますか?以前に何が起こったか(5.2で)、現在何が起こっているのか(5.1で)についてのより詳細な情報? –

答えて

3

。したがって、現在直接出力機能の外で "魔法の"方法で__toString()を使用している場合、期待通りに機能しません。

Source

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

+0

私はいくつかの出力がエコー経由であり、いくつかは返された値であることに気付きました。 そして、サポート担当者にphp5を更新するよう連絡しました。 ありがとう – Auras

+0

問題はありません - そのPHP 5.2がカットオフであることを確認してください。 –

1

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

、マジック__toString()は、documentationに従ってバージョン5.2+若干異なっている。

PHPは5.2.0前に直接混合したときに__toStringメソッドのみ呼び出されたことは注目に値しますecho()またはprint()を使用します。 PHP 5.2.0以降は、%s修飾子付きのprintf()などの任意の文字列コンテキストで呼び出されますが、%d修飾子付きの他の型コンテキストでは呼び出されません。 PHP 5.2.0以降、__toStringメソッドのないオブジェクトを文字列に変換すると、E_RECOVERABLE_ERRORが発生します。

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

関連する問題