2016-01-29 3 views
0

У меня есть класс:PHP - Возвращение класса в формате JSON

class A { 
    protected $nome;  

    public function getNome() { 
     return $this->nome . " exemplo"; 
    } 

    public function setNome($nome) { 
     $this->nome = $nome; 
    } 
} 

Когда я использую код:

$r = new A(); 
$r->setNome("My"); 
json_encode($r); 

код не возвращается из-за защищенного собственности , если имущество находится public код возвращается, но does'nt возвращает корректно.

+0

Вы можете посмотреть, как ваш класс расширяет JsonSerializable - http://php.net/manual/en/class.jsonserializable.php. – Scott

+0

Настройка как общественных работ для меня. – felipsmartins

ответ

0

Чтобы получить все свойства/вары вашего класса как JSON, вы можете добавить метод в класс:

class A 
{ 
    (...) 
    public function asJson() 
    { 
     $retval = get_object_vars($this); 
     $retval = call_user_func_array 
     ('json_encode', array_merge(array($retval), func_get_args())); 
     return $retval; 
    } 
} 

$r = new A(); 
$r->setNome('John Doe'); 

print_r($r->asJson()); 
print_r($r->asJson(JSON_PRETTY_PRINT)); 

eval.in demo

Я называю user_func_array() вместо прямого json_encode() так вам может пройти к вашему методу стандартные варианты оригинала json_encode() функция, подобная (т.е.) JSON_PRETTY_PRINT

+0

если у меня есть массив объектов? –

+0

какой объект? 'json_encode' encode также' stdObject' – fusion3k

+0

У меня есть метод, который возвращает список из базы данных для doctrine. Одно из свойств моего класса возвращает PersistentCollection, чем я хотел бы инкапсулировать для получения этого свойства в формате массива. –

Смежные вопросы