Экземпляр класса PHP для JSON
Я пытаюсь повторить содержимое объекта в формате JSON. Я совершенно не ознакомлен с PHP, и мне было интересно, есть ли предопределенная функция для этого (например, json_encode()) или вам нужно самостоятельно построить строку?
Когда Googling "PHP-объект для 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: "содержимое $name var", код: 1001, msg: error while выполнение запроса}
Ответы
Ответ 1
Ты просто там. Посмотрите 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());
Это должно заботиться о проблемах видимости.
Ответ 2
Альтернативное решение в 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);
Посмотрите пример здесь
Более подробная информация о \JsonSerializable
Ответ 3
Вам нужно сделать свою переменную общедоступной, чтобы она появилась на json_encode()
.
Кроме того, код, который вы ищете,
public function toJSON(){
return json_encode($this);
}
Ответ 4
public function toJSON(){
$json = array(
'name' => $this->getName(),
'code' => $this->getCode(),
'msg' => $this->getMsg(),
);
return json_encode($json);
}
Демо: http://codepad.org/mPNGD6Gv