Completed
Push — 2.x ( 19e42d...43f08f )
by Aleksei
17s queued 15s
created

RestoreStateTrait::__set_state()   A

Complexity

Conditions 3
Paths 3

Size

Total Lines 13
Code Lines 8

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 3
eloc 8
nc 3
nop 1
dl 0
loc 13
rs 10
c 0
b 0
f 0
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Cycle\Database\Config;
6
7
trait RestoreStateTrait
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
            $name = $parameter->getName();
19
            $arguments[$name] = \array_key_exists($name, $properties)
20
                ? $properties[$name]
21
                : $parameter->getDefaultValue();
22
        }
23
24
        return new static(...$arguments);
0 ignored issues
show
Unused Code introduced by
The call to Cycle\Database\Config\Re...ateTrait::__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

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