Я пытаюсь передать список объектов из php в json, но вывод не соответствует ожидаемому.
Контроллер:
if ($_SERVER['REQUEST_METHOD'] === 'GET') {
require_once "../dao/SubstanciaDAO.php";
require_once "../utils/php/Serialize.php"; // importing util to serialize list of objects
if(array_key_exists("fetchAll",$_GET))
{
$subs = SubstanciaDAO::read(array("all"));//fetching list of objects
if($subs) {
$list = jsonSerializeList($subs);//this function is written bellow in another file
if(isset($list))
echo json_encode($list, JSON_UNESCAPED_UNICODE);//writting output
else
echo "Erro";
}
}
}
Использовать для сериализация списка объектов:
Первая попытка:
function jsonSerializeList( array $arr ) {
$res = array();
foreach ($arr as $a) {
$aux = get_class_vars(get_class($a));
array_push($res, $aux);
}
return $res;
}
Вывод:
[[],[],[]]
Вторая попытка:
function jsonSerializeList( array $arr ) {
$res = array();
foreach ($arr as $a) {
$aux = get_object_vars($a);
array_push($res, $aux);
}
return $res;
}
Вывод:
[[],[],[]]
Заключение
Я предполагаю, что есть проблема с закрытыми атрибутами класса. В списке объектов "$ subs" каждая позиция является объектом класса "Sustancia. php":
class Substancia {
private $id;
private $principioAtivo;
private $nomeComercial;
private $apelidos;
public function __construct() {
$this->apelidos = array();
}
...
Можно ли исправить функцию "jsonSerializeList", чтобы она работала правильно ? Мне действительно нужна функция, которая выполняет сериализацию этого объекта для использования при необходимости.