ArgumentFormatter.php 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. <?php
  2. declare(strict_types=1);
  3. namespace NunoMaduro\Collision;
  4. /**
  5. * @internal
  6. *
  7. * @see \Tests\Unit\ArgumentFormatterTest
  8. */
  9. final class ArgumentFormatter
  10. {
  11. private const MAX_STRING_LENGTH = 1000;
  12. public function format(array $arguments, bool $recursive = true): string
  13. {
  14. $result = [];
  15. foreach ($arguments as $argument) {
  16. switch (true) {
  17. case is_string($argument):
  18. $result[] = '"'.(mb_strlen($argument) > self::MAX_STRING_LENGTH ? mb_substr($argument, 0, self::MAX_STRING_LENGTH).'...' : $argument).'"';
  19. break;
  20. case is_array($argument):
  21. $associative = array_keys($argument) !== range(0, count($argument) - 1);
  22. if ($recursive && $associative && count($argument) <= 5) {
  23. $result[] = '['.$this->format($argument, false).']';
  24. }
  25. break;
  26. case is_object($argument):
  27. $class = get_class($argument);
  28. $result[] = "Object($class)";
  29. break;
  30. }
  31. }
  32. return implode(', ', $result);
  33. }
  34. }