Completed
Push — master ( 997958...c1a544 )
by Adam
02:44
created

AbstractOutput::populateRow()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 2
CRAP Score 1

Importance

Changes 0
Metric Value
dl 0
loc 4
ccs 2
cts 2
cp 1
rs 10
c 0
b 0
f 0
cc 1
eloc 2
nc 1
nop 2
crap 1
1
<?php
2
3
namespace BestServedCold\Benchmark\Output;
4
5
use BestServedCold\PhalueObjects\Metric;
6
use BestServedCold\PhalueObjects\Metric\DeclaredInterface;
7
use BestServedCold\PhalueObjects\Metric\DeclaredTrait;
8
use BestServedCold\PhalueObjects\Metric\IncludedFile;
9
use BestServedCold\PhalueObjects\Metric\DeclaredClass;
10
use BestServedCold\PhalueObjects\Metric\DefinedConstant;
11
use BestServedCold\PhalueObjects\Metric\DefinedFunction;
12
use Symfony\Component\Console\Output\OutputInterface;
0 ignored issues
show
Bug introduced by
This use statement conflicts with another class in this namespace, BestServedCold\Benchmark\Output\OutputInterface.

Let’s assume that you have a directory layout like this:

.
|-- OtherDir
|   |-- Bar.php
|   `-- Foo.php
`-- SomeDir
    `-- Foo.php

and let’s assume the following content of Bar.php:

// Bar.php
namespace OtherDir;

use SomeDir\Foo; // This now conflicts the class OtherDir\Foo

If both files OtherDir/Foo.php and SomeDir/Foo.php are loaded in the same runtime, you will see a PHP error such as the following:

PHP Fatal error:  Cannot use SomeDir\Foo as Foo because the name is already in use in OtherDir/Foo.php

However, as OtherDir/Foo.php does not necessarily have to be loaded and the error is only triggered if it is loaded before OtherDir/Bar.php, this problem might go unnoticed for a while. In order to prevent this error from surfacing, you must import the namespace with a different alias:

// Bar.php
namespace OtherDir;

use SomeDir\Foo as SomeDirFoo; // There is no conflict anymore.
Loading history...
13
14
/**
15
 * Class AbstractOutput
16
 *
17
 * @package BestServedCold\Benchmark\Output
18
 */
19
abstract class AbstractOutput
20
{
21
    /**
22
     * @var array
23
     */
24
    protected static $countMetrics = [
25
        DeclaredInterface::class,
26
        DeclaredTrait::class,
27
        IncludedFile::class,
28
        DefinedFunction::class,
29
        DeclaredClass::class,
30
        DefinedConstant::class
31
    ];
32
33
    /**
34
     * @var array
35
     */
36
    protected static $headers = ['Name', 'Metric', 'Value'];
37
38
    /**
39
     * @var OutputInterface|Html
40
     */
41
    protected $output;
42
43
    /**
44
     * AbstractOutput constructor.
45
     *
46
     * @param $output
47
     */
48 2
    public function __construct($output)
49
    {
50 2
        $this->output = $output;
51 2
    }
52
53
    /**
54
     * @param  Metric     $metric
55
     * @return int|string
56
     */
57 2
    protected static function metricOutput(Metric $metric)
58
    {
59 2
        return in_array(get_class($metric), self::$countMetrics) ? $metric->count() : (string) $metric;
60
    }
61
62
    /**
63
     * @param  Metric $metric
64
     * @param  string $name
65
     * @return array
66
     */
67 1
    protected static function populateRow(Metric $metric, $name)
68
    {
69 1
        return [$name, $metric->getShortName(), static::metricOutput($metric)];
70
    }
71
}
72