web-dev-qa-db-ja.com

PHP JSONのクラスインスタンス

オブジェクトの内容をJSON形式でエコーしようとしています。私はPHPで経験が浅いので、これを行うための事前定義関数(json_encode()など)があるのか​​、それとも自分で文字列を作成する必要があるのか​​疑問に思っていました。 JSONに」、私はちょうどゴミを見つけています。

class Error {
    private $name;
    private $code;
    private $msg;
    public function __construct($ErrorName, $ErrorCode, $ErrorMSG){
        $this->name = $ErrorName;
        $this->code = $ErrorCode;
        $this->msg = $ErrorMSG;
    }
    public function getCode(){
        return $this->code;
    }
    public function getName(){
        return $this->name;
    }
    public function getMsg(){
        return $this->msg;
    }
    public function toJSON(){
        $json = "";

        return json_encode($json);
    }
}

JSONに返すもの:

{名前:「$ name varのコンテンツ」、コード:1001、msg:要求中のエラー}

31
Reinard

あなたはちょうどそこにいます。 get_object_vars をjson_encodeと組み合わせて見ると、必要なものがすべて揃っています。やること:

json_encode(get_object_vars($error));

探しているものを正確に返す必要があります。

コメントはget_object_varsの可視性の尊重をもたらしたので、クラスで次のようなことを行うことを検討してください。

public function expose() {
    return get_object_vars($this);
}

そして、以前の提案を次のように変更します。

json_encode($error->expose());

これで可視性の問題に対処する必要があります。

38
clexmond

PHP 5.4 +の代替ソリューションは、JsonSerializableインターフェースを使用することです。

class Error implements \JsonSerializable
{
    private $name;
    private $code;
    private $msg;

    public function __construct($errorName, $errorCode, $errorMSG)
    {
        $this->name = $ErrorName;
        $this->code = $ErrorCode;
        $this->msg = $ErrorMSG;
    }

    public function jsonSerialize()
    {
        return get_object_vars($this);
    }
}

次に、エラーオブジェクトを[〜#〜] json [〜#〜]json_encode

$error = new MyError("Page not found", 404, "Unfortunately, the page does not exist");
echo json_encode($error);

例を確認してください here

\ JsonSerializableの詳細

24
Mandy S

変数をjson_encode()に表示するには、変数をパブリックにする必要があります。

また、あなたが探しているコードは

public function toJSON(){
    return json_encode($this);
}
9
Madara Uchiha
public function toJSON(){
    $json = array(
        'name' => $this->getName(),
        'code' => $this->getCode(),
        'msg' => $this->getMsg(),
    );

    return json_encode($json);
}

デモ: http://codepad.org/mPNGD6Gv

5
Neal