Entity::__construct()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 15
Code Lines 0

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 1
CRAP Score 1

Importance

Changes 0
Metric Value
cc 1
eloc 0
c 0
b 0
f 0
nc 1
nop 12
dl 0
loc 15
ccs 1
cts 1
cp 1
crap 1
rs 10

How to fix   Many Parameters   

Many Parameters

Methods with many parameters are not only hard to understand, but their parameters also often become inconsistent when you need more, or different data.

There are several approaches to avoid long parameter lists:

1
<?php
2
3
declare(strict_types=1);
4
5
namespace Cycle\Annotated\Annotation;
6
7
use Doctrine\Common\Annotations\Annotation\Target;
8
use Spiral\Attributes\NamedArgumentConstructor;
9
10
/**
11
 * @Annotation
12
 * @NamedArgumentConstructor
13
 * @Target("CLASS")
14
 */
15
#[\Attribute(\Attribute::TARGET_CLASS), NamedArgumentConstructor]
16
final class Entity
17
{
18
    /**
19
     * @param non-empty-string|null $role Entity role. Defaults to the lowercase class name without a namespace.
0 ignored issues
show
Documentation Bug introduced by
The doc comment non-empty-string|null at position 0 could not be parsed: Unknown type name 'non-empty-string' at position 0 in non-empty-string|null.
Loading history...
20
     * @param class-string|null $mapper Mapper class name. Defaults to {@see \Cycle\ORM\Mapper\Mapper}
21
     * @param class-string|null $repository Repository class to represent read operations for an entity.
22
     *        Defaults to {@see \Cycle\ORM\Select\Repository}
23
     * @param non-empty-string|null $table Entity source table. Defaults to plural form of entity role.
24
     * @param bool $readonlySchema Set to true to disable schema synchronization for the assigned table.
25
     * @param non-empty-string|null $database Database name. Defaults to null (default database).
26
     * @param class-string|null $source Entity source class (internal). Defaults to {@see \Cycle\ORM\Select\Source}
27
     * @param non-empty-string|non-empty-string[]|null $typecast
28
     * @param class-string|null $scope Class name of constraint to be applied to every entity query.
29
     * @param Column[] $columns Entity columns.
30
     * @param ForeignKey[] $foreignKeys Entity foreign keys.
31 1056
     */
32
    public function __construct(
33
        private ?string $role = null,
34
        private ?string $mapper = null,
35
        private ?string $repository = null,
36
        private ?string $table = null,
37
        private bool $readonlySchema = false,
38
        private ?string $database = null,
39
        private ?string $source = null,
40
        private array|string|null $typecast = null,
41
        private ?string $scope = null,
42
        private array $columns = [],
43
        /** @deprecated Use {@see $scope} instead */
44
        private ?string $constrain = null,
45 1056
        private array $foreignKeys = [],
46
    ) {
47 1056
    }
48
49 1056
    public function getRole(): ?string
50
    {
51
        return $this->role;
52 1056
    }
53
54 1056
    public function getMapper(): ?string
55
    {
56
        return $this->mapper;
57 1056
    }
58
59 1056
    public function getRepository(): ?string
60
    {
61
        return $this->repository;
62 1056
    }
63
64 1056
    public function getTable(): ?string
65
    {
66
        return $this->table;
67 1056
    }
68
69 1056
    public function isReadonlySchema(): bool
70
    {
71
        return $this->readonlySchema;
72 1056
    }
73
74 1056
    public function getDatabase(): ?string
75
    {
76
        return $this->database;
77 1056
    }
78
79 1056
    public function getSource(): ?string
80
    {
81
        return $this->source;
82 1056
    }
83
84 1056
    public function getScope(): ?string
85
    {
86
        return $this->scope ?? $this->constrain;
87 1032
    }
88
89 1032
    public function getColumns(): array
90
    {
91
        return $this->columns;
92 1056
    }
93
94 1056
    public function getForeignKeys(): array
95
    {
96
        return $this->foreignKeys;
97
    }
98 1056
99
    public function getTypecast(): array|string|null
100
    {
101
        if (is_array($this->typecast) && count($this->typecast) === 1) {
102
            return reset($this->typecast);
103
        }
104
105
        return $this->typecast;
106
    }
107
}
108