J'essaie de faire écho au contenu d'un objet au format JSON. Je suis assez inexpérimenté avec PHP et je me demandais s'il y avait une fonction prédéfinie pour faire cela (comme json_encode ()) ou devez-vous construire la chaîne vous-même? Lorsque Google recherche un objet PHP à JSON ", je trouve juste des ordures.
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);
}
}
Ce que je veux que JSON retourne:
{nom: "le contenu de $ name var", code: 1001, msg: erreur lors de la demande}
Vous y êtes presque. Jetez un œil à get_object_vars en combinaison avec json_encode et vous aurez tout ce dont vous avez besoin. Faire:
json_encode(get_object_vars($error));
devrait retourner exactement ce que vous cherchez.
Les commentaires ont amené get_object_vars à respecter la visibilité, alors pensez à faire quelque chose comme ceci dans votre classe:
public function expose() {
return get_object_vars($this);
}
Et puis changer la suggestion précédente en:
json_encode($error->expose());
Cela devrait régler les problèmes de visibilité.
Une solution alternative en PHP 5.4 + utilise l'interface 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);
}
}
Ensuite, vous pouvez convertir votre objet d'erreur en [~ # ~] json [~ # ~] avec json_encode
$error = new MyError("Page not found", 404, "Unfortunately, the page does not exist");
echo json_encode($error);
Découvrez l'exemple ici
Vous devrez rendre votre variable publique pour qu'elle apparaisse sur json_encode()
.
De plus, le code que vous recherchez est
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);
}