Failed Conditions
Pull Request — master (#229)
by
unknown
03:02
created

Address::__construct()   B

Complexity

Conditions 1
Paths 1

Size

Total Lines 26
Code Lines 23

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 26
rs 8.8571
c 0
b 0
f 0
cc 1
eloc 23
nc 1
nop 11

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 Sylius\ShopApiPlugin\Model;
6
7
use Symfony\Component\HttpFoundation\Request;
8
use Webmozart\Assert\Assert;
9
10
final class Address
11
{
12
    /**
13
     * @var integer
14
     */
15
    private $id;
16
17
    /**
18
     * @var string
19
     */
20
    private $firstName;
21
22
    /**
23
     * @var string
24
     */
25
    private $lastName;
26
27
    /**
28
     * @var string
29
     */
30
    private $city;
31
32
    /**
33
     * @var string
34
     */
35
    private $countryCode;
36
37
    /**
38
     * @var string
39
     */
40
    private $street;
41
42
    /**
43
     * @var string
44
     */
45
    private $postcode;
46
47
    /**
48
     * @var string
49
     */
50
    private $provinceName;
51
52
    /**
53
     * @var string
54
     */
55
    private $provinceCode;
56
57
    /**
58
     * @var string
59
     */
60
    private $company;
61
62
    /**
63
     * @var string
64
     */
65
    private $phoneNumber;
66
67
    /**
68
     * @param null $id
69
     * @param string $firstName
70
     * @param string $lastName
71
     * @param string $city
72
     * @param string $street
73
     * @param string $countryCode
74
     * @param string $postcode
75
     * @param string $provinceName
76
     * @param null $provinceCode
77
     * @param null $company
78
     * @param null $phoneNumber
79
     */
80
    private function __construct(
81
        $id = null,
82
        $firstName,
0 ignored issues
show
Coding Style introduced by
Parameters which have default values should be placed at the end.

If you place a parameter with a default value before a parameter with a default value, the default value of the first parameter will never be used as it will always need to be passed anyway:

// $a must always be passed; it's default value is never used.
function someFunction($a = 5, $b) { }
Loading history...
83
        $lastName,
84
        $city,
85
        $street,
86
        $countryCode,
87
        $postcode,
88
        $provinceName = null,
89
        $provinceCode = null,
90
        $phoneNumber = null,
91
        $company = null
92
    )
93
    {
94
        $this->id = $id;
95
        $this->firstName = $firstName;
96
        $this->lastName = $lastName;
97
        $this->city = $city;
98
        $this->street = $street;
99
        $this->countryCode = $countryCode;
100
        $this->postcode = $postcode;
101
        $this->provinceName = $provinceName;
102
        $this->provinceCode = $provinceCode;
103
        $this->phoneNumber = $phoneNumber;
104
        $this->company = $company;
105
    }
106
107
    /**
108
     * @param array $address
109
     *
110
     * @return Address
111
     */
112
    public static function createFromArray(array $address)
113
    {
114
        Assert::keyExists($address, 'firstName');
115
        Assert::keyExists($address, 'lastName');
116
        Assert::keyExists($address, 'city');
117
        Assert::keyExists($address, 'street');
118
        Assert::keyExists($address, 'countryCode');
119
        Assert::keyExists($address, 'postcode');
120
121
        return new self(
122
            $address['id'] ?? null,
123
            $address['firstName'],
124
            $address['lastName'],
125
            $address['city'],
126
            $address['street'],
127
            $address['countryCode'],
128
            $address['postcode'],
129
            $address['provinceName'] ?? null,
130
            $address['provinceCode'] ?? null,
131
            $address['phoneNumber'] ?? null,
132
            $address['company'] ?? null
133
        );
134
    }
135
136
    /**
137
     * @param Request $request
138
     *
139
     * @return Address
140
     */
141
    public static function createFromRequest(Request $request)
142
    {
143
        return new self(
144
            $request->attributes->get('id') ?? $request->request->get('id'),
145
            $request->request->get('firstName'),
146
            $request->request->get('lastName'),
147
            $request->request->get('city'),
148
            $request->request->get('street'),
149
            $request->request->get('countryCode'),
150
            $request->request->get('postcode'),
151
            $request->request->get('provinceName'),
152
            $request->request->get('provinceCode'),
153
            $request->request->get('phoneNumber'),
154
            $request->request->get('company')
155
        );
156
    }
157
158
    /**
159
     * @return mixed
160
     */
161
    public function id()
162
    {
163
        return $this->id;
164
    }
165
166
    /**
167
     * @return string
168
     */
169
    public function firstName()
170
    {
171
        return $this->firstName;
172
    }
173
174
    /**
175
     * @return string
176
     */
177
    public function lastName()
178
    {
179
        return $this->lastName;
180
    }
181
182
    /**
183
     * @return string
184
     */
185
    public function city()
186
    {
187
        return $this->city;
188
    }
189
190
    /**
191
     * @return string
192
     */
193
    public function street()
194
    {
195
        return $this->street;
196
    }
197
198
    /**
199
     * @return string
200
     */
201
    public function countryCode()
202
    {
203
        return $this->countryCode;
204
    }
205
206
    /**
207
     * @return string
208
     */
209
    public function postcode()
210
    {
211
        return $this->postcode;
212
    }
213
214
    /**
215
     * @return string
216
     */
217
    public function provinceName()
218
    {
219
        return $this->provinceName;
220
    }
221
222
    /**
223
     * @return string
224
     */
225
    public function provinceCode()
226
    {
227
        return $this->provinceCode;
228
    }
229
230
    /**
231
     * @return string
232
     */
233
    public function company()
234
    {
235
        return $this->company;
236
    }
237
238
    /**
239
     * @return string
240
     */
241
    public function phoneNumber()
242
    {
243
        return $this->phoneNumber;
244
    }
245
}
246