Intereting Posts
cakephp datasource Вызов неопределенного метода Внедрение различных представлений уровня пользователя в php Как заставить CodeIgniter принимать URL-адрес строки запроса? Преобразование корейских символов в объекты Идентификатор последней записи PDO всегда правильный? cakephp 2 – разбиение на страницы за пределами первой страницы не работает Тестирование производительности на стороне сервера веб-приложения php Проблема кодирования в phpMyAdmin. В частности, с записями, содержащими русский текст Рендеринг виджета SoundCloud для частного трека с использованием PHP API как удалить обратную косую черту («\») в ответ json с помощью php? В чем разница между заголовком PHP и javascript window.location? JQuery, чтение переменных JSON, полученных из PHP Автозаполнение формы, заполненной базой данных? PHP-скрипт, который может извлекать текст из нескольких тегов заголовков определенного веб-сайта? Каковы ваши стратегии шаблонов?

Экземпляр класса 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: ошибка при выполнении запроса}

Ты просто там. Взгляните на 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()); 

Это должно заботиться о проблемах видимости.

Вам нужно будет сделать вашу переменную общедоступной, чтобы они отображались на json_encode() .

Кроме того, код, который вы ищете,

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

Альтернативное решение в 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

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

Демо: http://codepad.org/mPNGD6Gv