validateData($data); $this->data = $data; } public function getData(): array { return $this->data; } } class Post { private string $title; private string $description; public function __construct(string $title, string $description) { $this->validateTitle($title); $this->validateDescription($description); $this->title = $title; $this->description = $description; } public function getTitle(): string { return $this->title; } public function getDescription(): string { return $this->description; } } class Post { private string $title; private string $description; public function setTitle(string $title) { $this->validateTitle($title); $this->title = $title; } public function setDescription(string $description) { $this->validateDescription($description); $this->description = $description; } public function getTitle(): string { return $this->title; } public function getDescription(): string { return $this->description; } } class Post { // bla-bla public function fromRequest(ServerRequestInterface $request) { // ... } } // See https://github.com/fireproofsocks/dto class Post extends Dto\Dto { protected $schema = [ 'type' => 'object', 'properties' => [ 'title' => ['type' => 'string'], 'description' => ['type' => 'string'] ], 'additionalProperties' => false ]; }