/** * @param RawMessage|string|array $msg * - RawMessage: is cloned * - array: first element is $key, rest are $params to RawMessage::__construct * - string: passed to RawMessage::__construct * @param string|null $code * @param array|null $data * @return ApiMessage */ public function __construct($msg, $code = null, array $data = null) { if ($msg instanceof RawMessage) { foreach (get_class_vars(get_class($this)) as $key => $value) { if (isset($msg->{$key})) { $this->{$key} = $msg->{$key}; } } } elseif (is_array($msg)) { $key = array_shift($msg); parent::__construct($key, $msg); } else { parent::__construct($msg); } $this->apiCode = $code; $this->apiData = (array) $data; }