public static function factory($response, $method, $url, $parameters) { if (is_string($response)) { $response = Client::parseRawResponse($response); } if (!$response) { return new NoResponseException(); } if (isset($response['status_code']) and isset(self::$code_subtypes[$response['status_code']])) { return new self::$code_subtypes[$response['status_code']]($response, $method, $url, $parameters); } elseif (isset($response['status_message']) and isset(self::$status_subtypes[$response['status_message']])) { return new self::$status_subtypes[$response['status_message']]($response, $method, $url, $parameters); } else { return new self($response, $method, $url, $parameters); } }