在实现JsonSerializable时,PHP Json_encode无法使用对象

时间:2016-01-14 10:33:38

标签: php json

我遇到了问题。我有两个PHP文件,每个文件用对象回显一个json_encode()数组(一个用户数组和一个奖励数组)。但是,当用户返回[{},{},{}]

时,奖励完全正常

这是 users.php

<?php

header('Content-Type: application/json');

require('../logic/User.php');
require('../database/Database.php');

$database = new Database();

if(isset($_GET['id'])) {
    $user = $database->getUserById($_GET['id']);
    if($user != false){
        echo json_encode($user);
    }else{
        echo 'User not found';
    }
}else {
    $users = $database->getUsers();
    echo json_encode($users);
}
?>

这是用户类(没有魔术方法):

class User implements JsonSerializable
{
    private $id;
    private $name;
    private $birthday;
    private $gender;
    private $address;
    private $postalcode;
    private $phonenr;
    private $email;
    private $facebookid;

    private $accessible = array('id', 'name', 'birthday', 'gender', 'address', 'postalcode', 'phonenr', 'email', 'facebookid');
    private $editable = array('name', 'birthday', 'gender', 'address', 'postalcode', 'phonenr', 'email', 'facebookid');
    private $required = array('id', 'name');

//getter, setter, constructor

    public function jsonSerialize(){
        return ['id' => $this->id,
            'name'=>$this->name,
            'birthday'=>$this->birthday,
            'gender'=>$this->gender,
            'address'=>$this->address,
            'postalcode'=>$this->postalcode,
            'phonenr'=>$this->phonenr,
            'email'=>$this->email,
            'facebookid'=>$this->facebookid
        ];
    }
}

$ users 已填写,因此问题必须是json_encode()

1 个答案:

答案 0 :(得分:0)

因为用户属性是私有的。 如果你将它们公之于众,它们就会显示出来。

然而,决定是否要将它们更改为公开,因为它们可能是私有的。