2012-03-27 7 views
25

私はJSON形式でオブジェクトの内容をエコーし​​ようとしています。私はPHPにはまったく不慣れで、json_encode()のようにこれを行うための事前定義された関数があるのか​​、自分で文字列を構築しなければならないのだろうかと疑問に思っていました。 "PHPオブジェクトからJSONへ"グーグルでは、私はゴミだけを探しています。JSONへのPHPクラスインスタンス

私はtoJSONを返すようにしたいどのような
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); 
    } 
} 

{名: "$名VARの内容"、コード:1001、MSG:エラー が要求をしながら}

+4

PROBでJSONにエラー・オブジェクトに変換することができますこれを書いている時間ですが、> 5.4を使用している場合は、あなたのクラス実装[JsonSerializable](http://www.php.net/manual/en/jsonserializable.jsonserialize.php) –

答えて

31

あなたはちょうどそこにいます。 json_encodeと組み合わせてget_object_varsを見てみると、必要なものすべてを手に入れることができます。 Doing:

json_encode(get_object_vars($error)); 

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

コメントは視認性get_object_varsの敬意を育てたので、あなたのクラスで、次のようなものをやって考えてみます。

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

そして、前の提案を変更:

世話をする必要があります
json_encode($error->expose()); 

可視性の問題の

+0

私はこれを前に試しましたが、{}が返されました。 私は前に何か間違ったことをしたと思います。 – Reinard

+0

AFAIK get_object_varsは呼び出されたスコープも考慮に入れます。したがって、オブジェクト内のメソッドから呼び出すと、private vars –

+0

'json_encode(get_object_vars($ error)); 'にアクセスできます。 、秘密はありません。 – grifos

4
public function toJSON(){ 
    $json = array(
     'name' => $this->getName(), 
     'code' => $this->getCode(), 
     'msg' => $this->getMsg(), 
    ); 

    return json_encode($json); 
} 

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

7

あなたは彼らがjson_encode()に表示されるようにするために、あなたの変数公衆を作成する必要があります。 PHP 5.4+で代替ソリューションをJsonSerializableインタフェースを使用している

public function toJSON(){ 
    return json_encode($this); 
} 
+0

get_object_varsでシリアル化したくないプロパティを除外する方法がわからないので、私はこれが好きです。 –

8

また、あなたが探しているコードがあります。周りではなかった

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_encode

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

チェックアウトの例here

More information about \JsonSerializable

関連する問題