Как я могу получить JSON-представление класса, который использует геттеры и сеттеры? - PullRequest
0 голосов
/ 28 мая 2018

Я новичок в геттерах и настройках и хочу попробовать их.Я вижу, как получить одно свойство, но как получить свойства получения или все из них в формате JSON, например {"firstField":321, "secondField":123}.Я пробовал public function get(){ return $this;} и даже public function getJson(){return json_encode($this);}, но просто получаю пустой JSON.

PS.Является ли return $this; в установщике опечаткой или оно дает какое-то значение?

<?php
class MyClass {
  private $firstField;
  private $secondField;

  public function __get($property) {
    if (property_exists($this, $property)) {
      return $this->$property;
    }
  }

  public function __set($property, $value) {
    if (property_exists($this, $property)) {
      $this->$property = $value;
    }

    return $this;
  }
}
?>

Ссылка https://stackoverflow.com/a/4478690/1032531

1 Ответ

0 голосов
/ 29 мая 2018

Вдохновленный NobbyNobbs.

abstract class Entity implements \JsonSerializable
{
    public function __get($property) {
        if (property_exists($this, $property)) return $this->$property;
        else throw new \Exception("Property '$property' does not exist");
    }

    public function __set($property, $value) {
        if (!property_exists($this, $property)) throw new \Exception("Property '$property' is not allowed");
        $this->$property = $value;
        return $this;
    }
}

class Something extends Entity
{
    protected $name, $id, $data=[];

    public function jsonSerialize()
    {
        return [
            'id' => $this->id,
            'name' => $this->name,
            'data' => $this->data
        ];
    }
}
...