オブジェクトの内容を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:要求中のエラー}
あなたはちょうどそこにいます。 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());
これで可視性の問題に対処する必要があります。
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
変数をjson_encode()
に表示するには、変数をパブリックにする必要があります。
また、あなたが探しているコードは
public function toJSON(){
return json_encode($this);
}
public function toJSON(){
$json = array(
'name' => $this->getName(),
'code' => $this->getCode(),
'msg' => $this->getMsg(),
);
return json_encode($json);
}