0

問題: を公開したくありませ$myPropertyん。publicpublic__toString()

class A
{
    protected $myProperty;

    public function __toString()
    {
        return json_encode($this);
    }
}

ReflectionPropertyクラスに という名前のメソッドがあることは知ってsetAccessible()いますが、文字列を返す前にどのように使用すればよいのでしょうか?

編集JSonSerializable: コメントによると、クラスではない PHP 5.3.x との互換性が必要です。

4

2 に答える 2

3

get_object_varsメソッド内でPHP 5.3を使用する__toString()場合:

public function __toString()
{
    return json_encode(get_object_vars($this));
}

使用デモ:

class A
{
    protected $myProperty = 'hello';

    public function __toString()
    {
        return json_encode(get_object_vars($this));
    }
}

echo new A; 

出力:

{"myProperty":"hello"}

ヒント: 独自のJsonSerializableインターフェースを作成し、独自のjsonSerialize()メソッドを実装して上位互換性を確保してください。必要なときに関数を呼び出すか、内部で呼び出します__toString()

public function __toString()
{
    return json_encode($this->jsonSerialize());
}
于 2012-12-18T00:51:52.280 に答える
0

単純にPHPstdClassオブジェクトを作成し、それをJSONにシリアル化してみませんか。JSONから逆シリアル化すると、とにかくそれが正確に得られるからです。

多分このようなもの:

public function __toString() {
   $return = new stdClass();
   $properties = get_object_vars($this);
   foreach ($properties as $key => $value) {
       $return->$key = $value;
   }
   return json_encode($return);
}
于 2012-12-18T00:51:05.013 に答える