$datum) { if ($datum === null) { continue; } $tmp[] = static::ifElse($key, $datum); } return implode('&', $tmp); } /** * @param $t * @param $qt * @return string * @throws */ private static function ifElse(string $t, mixed $qt): string { if (is_numeric($qt)) { return $t . '=' . $qt; } if (is_string($qt)) { $string = $t . '=' . urlencode($qt); } else { $string = static::encode($t, $qt); } return $string; } /** * @param mixed ...$object * @return string * @throws */ private static function encode(...$object): string { $ret = []; $data = $object[count($object) - 1]; $key = static::getKey(...$object); foreach ($data as $s => $datum) { if (is_array($datum)) { $object[count($object) - 1] = $s; $object[] = $datum; $string = static::encode(...$object); } else { if (is_object($datum)) { throw new Exception('Http body con\'t object.'); } $string = $key . '=' . urlencode($datum); } $ret[] = $string; } return implode('&', $ret); } }