ArgumentFormatter.php 1.3 KB

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