Duplicate code is one of the most pungent code smells. A rule that is often used is to re-structure code once it is duplicated in three or more places.
Common duplication problems, and corresponding solutions are:
1 | <?php |
||
8 | final class Order extends BaseResource implements Emptiable |
||
9 | { |
||
10 | use EmptiableTrait; |
||
11 | |||
12 | /** |
||
13 | * @var string |
||
14 | */ |
||
15 | private $orderId; |
||
16 | |||
17 | /** |
||
18 | * @var string |
||
19 | */ |
||
20 | private $operation; |
||
21 | |||
22 | /** |
||
23 | * @var string |
||
24 | */ |
||
25 | private $callbackUrl; |
||
26 | |||
27 | /** |
||
28 | * @var float |
||
29 | */ |
||
30 | private $amount; |
||
31 | |||
32 | /** |
||
33 | * @var int |
||
34 | */ |
||
35 | private $installments; |
||
36 | |||
37 | /** |
||
38 | * @var string |
||
39 | */ |
||
40 | private $expiry; |
||
41 | |||
42 | /** |
||
43 | * @var string |
||
44 | */ |
||
45 | private $fingerprint; |
||
46 | |||
47 | /** |
||
48 | * @var Payment |
||
49 | */ |
||
50 | private $payment; |
||
51 | |||
52 | /** |
||
53 | * @var Cart |
||
54 | */ |
||
55 | private $cart; |
||
56 | |||
57 | /** |
||
58 | * @var Customer |
||
59 | */ |
||
60 | private $customer; |
||
61 | |||
62 | /** |
||
63 | * @var Subscription |
||
64 | */ |
||
65 | private $subscription; |
||
66 | |||
67 | /** |
||
68 | * @return string |
||
69 | */ |
||
70 | public function getOrderId() |
||
74 | |||
75 | /** |
||
76 | * @return string |
||
77 | */ |
||
78 | public function getOperation() |
||
82 | |||
83 | /** |
||
84 | * @return string |
||
85 | */ |
||
86 | public function getCallbackUrl() |
||
90 | |||
91 | /** |
||
92 | * @return float |
||
93 | */ |
||
94 | public function getAmount() |
||
98 | |||
99 | /** |
||
100 | * @return int |
||
101 | */ |
||
102 | public function getInstallments() |
||
106 | |||
107 | /** |
||
108 | * @param string $orderId |
||
109 | */ |
||
110 | public function setOrderId($orderId) |
||
116 | |||
117 | /** |
||
118 | * @param string $operation |
||
119 | */ |
||
120 | public function setOperation($operation) |
||
126 | |||
127 | /** |
||
128 | * @param string $callbackUrl |
||
129 | */ |
||
130 | public function setCallbackUrl($callbackUrl) |
||
136 | |||
137 | /** |
||
138 | * @param float $amount |
||
139 | */ |
||
140 | public function setAmount($amount) |
||
146 | |||
147 | /** |
||
148 | * @param int $installments |
||
149 | */ |
||
150 | public function setInstallments($installments) |
||
156 | |||
157 | /** |
||
158 | * @return string |
||
159 | */ |
||
160 | public function getExpiry() |
||
164 | |||
165 | /** |
||
166 | * @param string $expiry |
||
167 | */ |
||
168 | public function setExpiry($expiry) |
||
179 | |||
180 | /** |
||
181 | * @return string |
||
182 | */ |
||
183 | public function getFingerprint() |
||
187 | |||
188 | /** |
||
189 | * @param string $fingerprint |
||
190 | */ |
||
191 | public function setFingerprint($fingerprint) |
||
197 | |||
198 | private function checkIfInstallmentsIsValidAndReturn($installments) |
||
210 | |||
211 | View Code Duplication | private function isValidExpiryFormatDate($date) |
|
221 | |||
222 | /** |
||
223 | * @return Payment |
||
224 | */ |
||
225 | public function getPayment() |
||
233 | |||
234 | /** |
||
235 | * @param Payment $payment |
||
236 | */ |
||
237 | public function setPayment(Payment $payment) |
||
243 | |||
244 | /** |
||
245 | * @return Cart |
||
246 | */ |
||
247 | public function getCart() |
||
255 | |||
256 | /** |
||
257 | * @param Cart $cart |
||
258 | */ |
||
259 | public function setCart(Cart $cart) |
||
265 | |||
266 | /** |
||
267 | * @return Customer |
||
268 | */ |
||
269 | public function getCustomer() |
||
277 | |||
278 | /** |
||
279 | * @param Customer $customer |
||
280 | */ |
||
281 | public function setCustomer(Customer $customer) |
||
287 | |||
288 | /** |
||
289 | * @return Subscription |
||
290 | */ |
||
291 | public function getSubscription() |
||
299 | |||
300 | /** |
||
301 | * @param Subscription $subscription |
||
302 | */ |
||
303 | public function setSubscription(Subscription $subscription) |
||
309 | } |
||
310 |
Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.
You can also find more detailed suggestions in the “Code” section of your repository.