fields = []; } /** * Sets the specified field. * * @param string $key Component key, e.g. 'Language' * @param string $name Component name, e.g. 'PHP' * @param string $version Version identifier, e.g. '5.4.10' * @param array $options Additional information * * @return self */ public function setField($key, $name, $version = '', array $options = []) { $field = [ 'name' => $name ]; if (!empty($version)) { $field['version'] = $version; } if (!empty($options)) { $field['options'] = $options; } $this->fields[$key] = $field; return $this; } /** * Serialises the user agent. * * @return string */ public function __toString() { $parts = []; foreach ($this->fields as $key => $value) { $component = "{$key}/{$value['name']}"; if (!empty($value['version'])) { $component .= "_{$value['version']}"; } $parts[] = $component; if (empty($value['options'])) { continue; } $opts = implode('; ', $value['options']); $parts[] = "({$opts})"; } return implode(' ', $parts); } /** * Creates the default user agent. * * @return self */ public static function createDefault() { $agent = new static(); $options = ['Guzzle/' . ClientInterface::VERSION]; if (extension_loaded('curl')) { $options[] = 'curl/' . curl_version()['version']; } return $agent ->setField('Library', static::NAME, static::VERSION, $options) ->setField('OS', php_uname('s'), php_uname('r')) ->setField('Language', 'PHP', phpversion()); } }