Passed
Pull Request — 2.x (#91)
by Aleksei
18:20
created

StateTrait::__set_state()   A

Complexity

Conditions 3
Paths 3

Size

Total Lines 12
Code Lines 7

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 3
eloc 7
c 1
b 0
f 0
nc 3
nop 1
dl 0
loc 12
rs 10
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Cycle\Database\Config;
6
7
trait StateTrait
8
{
9
    /**
10
     * @throws \ReflectionException
11
     */
12
    public static function __set_state(array $properties): static
13
    {
14
        $ref = new \ReflectionClass(static::class);
15
16
        $arguments = [];
17
        foreach ($ref->getConstructor()?->getParameters() ?? [] as $parameter) {
18
            $arguments[$parameter->getName()] = \array_key_exists($parameter->getName(), $properties)
19
                ? $properties[$parameter->getName()]
20
                : $parameter->getDefaultValue();
21
        }
22
23
        return new static(...$arguments);
0 ignored issues
show
Unused Code introduced by
The call to Cycle\Database\Config\StateTrait::__construct() has too many arguments starting with $arguments. ( Ignorable by Annotation )

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

23
        return /** @scrutinizer ignore-call */ new static(...$arguments);

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...
24
    }
25
}
26