Passed
Push — master ( 8d387d...2ce63d )
by Luis
03:13
created

Method   A

Complexity

Total Complexity 8

Size/Duplication

Total Lines 54
Duplicated Lines 0 %

Test Coverage

Coverage 100%

Importance

Changes 0
Metric Value
dl 0
loc 54
ccs 23
cts 23
cp 1
rs 10
c 0
b 0
f 0
wmc 8

7 Methods

Rating   Name   Duplication   Size   Complexity  
A __toString() 0 7 2
A parameters() 0 3 1
A isConstructor() 0 3 1
A __construct() 0 7 1
A public() 0 3 1
A private() 0 3 1
A protected() 0 3 1
1
<?php
2
/**
3
 * PHP version 7.1
4
 *
5
 * This source file is subject to the license that is bundled with this package in the file LICENSE.
6
 */
7
8
namespace PhUml\Code;
9
10
/**
11
 * It represents a class or interface method
12
 *
13
 * It doesn't distinguish neither static methods nor return types yet
14
 */
15
class Method implements HasVisibility, CanBeAbstract, CanBeStatic
16
{
17
    use WithVisibility, WithAbstractModifier, WithStaticModifier;
18
19
    /** @var string */
20
    private $name;
21
22
    /** @var Variable[] */
23
    private $parameters;
24
25 132
    protected function __construct(string $name, Visibility $modifier, array $parameters = [])
26
    {
27 132
        $this->name = $name;
28 132
        $this->modifier = $modifier;
29 132
        $this->parameters = $parameters;
30 132
        $this->isAbstract = false;
31 132
        $this->isStatic = false;
32 132
    }
33
34
    /** @param Variable[] $parameters */
35 123
    public static function public(string $name, array $parameters = []): Method
36
    {
37 123
        return new static($name, Visibility::public (), $parameters);
38
    }
39
40
    /** @param Variable[] $parameters */
41 15
    public static function protected(string $name, array $parameters = []): Method
42
    {
43 15
        return new static($name, Visibility::protected (), $parameters);
44
    }
45
46
    /** @param Variable[] $parameters */
47 45
    public static function private(string $name, array $parameters = []): Method
48
    {
49 45
        return new static($name, Visibility::private (), $parameters);
50
    }
51
52 36
    public function isConstructor(): bool
53
    {
54 36
        return $this->name === '__construct';
55
    }
56
57 30
    public function parameters(): array
58
    {
59 30
        return $this->parameters;
60
    }
61
62 48
    public function __toString()
63
    {
64 48
        return sprintf(
65 48
            '%s%s%s',
66 48
            $this->modifier,
67 48
            $this->name,
68 48
            empty($this->parameters) ? '()' : '( ' . implode($this->parameters, ', ') . ' )'
0 ignored issues
show
Unused Code introduced by
The call to implode() has too many arguments starting with ', '. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

68
            empty($this->parameters) ? '()' : '( ' . /** @scrutinizer ignore-call */ implode($this->parameters, ', ') . ' )'

This check compares calls to functions or methods with their respective definitions. If the call has more arguments than are defined, it raises an issue.

If a function is defined several times with a different number of parameters, the check may pick up the wrong definition and report false positives. One codebase where this has been known to happen is Wordpress. Please note the @ignore annotation hint above.

Loading history...
69
        );
70
    }
71
}
72