input = $input; } public function serializeToArray() { return $output = $this->traverse($this->input); } private function traverse($input) { if (is_array($input)) { foreach ($input as $key => $val) { $input[$key] = $this->traverse($input[$key]); } return $input; } elseif ($input instanceof ISerializable) { return $input->serializeToArray(); } elseif ($input instanceof Exception) { return $this->serializeException($input); } elseif (is_object($input)) { foreach ($input as $key => $val) { $input->$key = $this->traverse($input->$key); } return $input; } return $input; } private function serializePost(PostEntity $post) { return [ 'name' => $post->getName(), ]; } private function serializeException(Exception $exception) { return [ 'message' => $exception->getMessage(), 'trace' => explode("\n", $exception->getTraceAsString()) ]; } }