Subversion-Projekte lars-tiefland.laravel_shop

Revision

Details | Letzte Änderung | Log anzeigen | RSS feed

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