PHP 5.4 introduced the JsonSerializable interface to rectify this. It defines a single method called jsonSerialize() where you specify how your class should be converted to JSON.
Whatever this method returns is what will appear in the encoded output of json_encode(). You can return a number, a string, an array or an associative array. Only if you return an associative array will your class actually be encoded as a class in JSON notation.
Normally, you'll probably want your class to be encoded as a class with all its properties present, in which case you can use PHP's get_object_vars() like so:
class Customer implements JsonSerializable {
private $id;
private $accountRef;
public function setId($id) {
$this->id = $id;
}
public function setAccountRef($accountRef) {
$this->accountRef = $accountRef;
}
public function jsonSerialize() {
return get_object_vars($this);
}
}