Conversion d'un objet PHP en JSON


Prenons la classe User suivante.

class User
{
    
    public $email;
    public $name;
    public $password;

    public function __construct($email, $name, $password)
    {
        $this->email = $email;
        $this->name = $name;
        $this->password = $password;
    }

    //Getters, Setters


}

Nous pouvons encoder l'objet dans un format json en utilisant la fonction json_encode

$user = new User("john.doe@example.com", "johnDoe", "john123");
echo json_encode($user);

Ce code affichera la ligne suivante

{"email":"john.doe@example.com","name":"johnDoe","password":"john123"}

Cependant si les propriétés de l'objet sont privées, le code précédent afficherait un objet vide

class User
{
    
    private $email;
    private $name;
    private $password;

    public function __construct($email, $name, $password)
    {
        $this->email = $email;
        $this->name = $name;
        $this->password = $password;
    }

    //Getters, Setters


}

Affichage :

{}

Pour résoudre ce problÚme, il faut utiliser l'interface JsonSerializable

Il faut ensuite implémenter la fonction jsonSerialize() en retournant un tableau (array) avec les propriétés.

class User implements JsonSerializable
{
    
    private $email;
    private $name;
    private $password;

    public function __construct($email, $name, $password)
    {
        $this->email = $email;
        $this->name = $name;
        $this->password = $password;
    }

    //Getters, Setters

    public function jsonSerialize()
    {
        return 
        [
            'email'    => $this->email,
            'name'     => $this->name,
            'password' => $this->password,
        ];
    }


}

Commentaires