5

codeigniterでは、モデルに toString メソッドを実装する必要があるこのプラグインを使用しようとしています。私の toString メソッドは単純に

public function __toString()
{
    return (string)$this->name;
}

PHP 5.3 を使用するローカル マシンではすべて問題なく動作しますが、PHP 5.1.6 を使用する運用サーバーでは、そのオブジェクトの name プロパティの値が表示される場所に「Object id#48」と表示されます。ここに問題がありますが、まだ理解できません...どうすればこれを修正できますか?

4

5 に答える 5

7
class YourClass 
{
    public function __toString()
    {
        return $this->name;
    }
}

PHP < 5.2.0

$yourObject = new YourClass();
echo $yourObject; // this works
printf("%s", $yourObject); // this does not call __toString()
echo 'Hello ' . $yourObject; // this does not call __toString()
echo 'Hello ' . $yourObject->__toString(); // this works
echo (string)$yourObject; // this does not call __toString()

PHP >= 5.2.0

$yourObject = new YourClass();
echo $yourObject; // this works
printf("%s", $yourObject); // this works
echo 'Hello ' . $yourObject; // this works
echo 'Hello ' . $yourObject->__toString(); // this works
echo (string)$yourObject; // this works
于 2010-05-25T07:04:30.630 に答える
3

マニュアルから引用するには:

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

__toString メソッドを PHP < 5.2 で使用していて、echo または print のコンテキストで使用していない場合は、手動で呼び出していると思います。

于 2010-05-25T06:16:33.537 に答える
2

PHP のアップグレード

私は同じ問題を扱っています。あなたの最善の選択肢は、本番サーバーのphpをアップグレードすることだと思います>= 5.2.0

将来 (私は現在これを難しい方法で学んでいます)、展開先と同じバージョンで開発してみてください。

于 2011-09-01T18:33:09.107 に答える
0

バージョン 5.2 より前のバージョンでは、php マジック関数 __toString() を明示的に呼び出す必要があります。したがって、コードは次のようになります。

    public function myname()
    {
       $name = $this->name;
       return $name.__toString(); //for php versions < 5.2,will also work > 5.2
    }

バージョン > 5.2 の場合、__toString が自動的に呼び出されます

于 2012-10-15T06:50:20.317 に答える