У меня есть любопытная проблема, и я не могу найти, как ее решить. Я использую интерфейс JsonSerializable в PHP для создания JSON для возврата. В одном объекте, который я использую, у меня есть переменная, представляющая собой массив объектов. Он работает, когда массив содержит только один объект, но когда есть несколько, я получаю пустой массив. Я не понимаю. Вот это код:PHP JsonSerializable вложенный объект
class SessionDate implements JsonSerializable {
private $_players;
public function getPlayers() { return $this->_players; }
public function setPlayers($players) {
$this->_players = $players;
}
public function jsonSerialize(){
return [
'players' => $this->getPlayers() // This is an array of player
];
}
}
class Player implements JsonSerializable {
private $_id;
private $_name;
public function getId() { return $this->_id; }
public function setId($id) { $this->_id = $id; }
public function getName() { return $this->_name; }
public function setName($name) { $this->_name = $name; }
public function jsonSerialize(){
return [
'id' => $this->getId(),
'name' => $this->getName()
];
}
}
И это, как я получаю список игроков:
$q = $this->_db->prepare('the query');
$q->execute();
$players = [];
while ($data = $q->fetch()) {
$sessionPlayer = constructPlayer($data);
$players[] = $sessionPlayer;
}
return $players;
Что я делаю неправильно? И почему это работает, когда есть один игрок, а не больше?
Спасибо.
** EDIT **
Я называю действие PHP с $ .ajax и, кажется, что, когда есть больше чем один игрок, ответ $ .ajax проходит через ошибки. Так что, может быть, это потому, что JSON не отформатирован хорошо ...
Что такое 'constructPlayer'? – raina77ow
Это всего лишь набор данных настроек игроку объекта. Это работает, потому что там, где есть только один, я получаю все данные ... – Fred