PHP Сериализация списка объектов до json приходит ноль - PullRequest
0 голосов
/ 29 января 2020

Я пытаюсь передать список объектов из 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", чтобы она работала правильно ? Мне действительно нужна функция, которая выполняет сериализацию этого объекта для использования при необходимости.

...