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 |
||
12 | View Code Duplication | class TwilioHandler extends SMSHandler |
|
|
|||
13 | { |
||
14 | /** |
||
15 | * API version 1 |
||
16 | */ |
||
17 | const API_V1 = '2010-04-01'; |
||
18 | |||
19 | /** |
||
20 | * @param string $secret Twilio API Secret Token |
||
21 | * @param string $sid Twilio API SID |
||
22 | * @param string $fromNumber The phone number that will be shown as the sender ID |
||
23 | * @param string $toNumber The phone number to which the message will be sent |
||
24 | * @param int $level The minimum logging level at which this handler will be triggered |
||
25 | * @param bool $bubble Whether the messages that are handled can bubble up the stack or not |
||
26 | * @param bool $useSSL Whether to connect via SSL. |
||
27 | * @param string $host The Twilio server hostname. |
||
28 | * @param string $version The Twilio API version (default TwilioHandler::API_V1) |
||
29 | * @param int $limit The character limit |
||
30 | */ |
||
31 | 18 | public function __construct($secret, $sid, $fromNumber, $toNumber, $level = Logger::CRITICAL, $bubble = true, $useSSL = true, $host = 'api.twilio.com', $version = self::API_V1, $limit = 160) |
|
38 | |||
39 | /** |
||
40 | * {@inheritdoc} |
||
41 | * |
||
42 | * @param array $record |
||
43 | * @return string |
||
44 | */ |
||
45 | 12 | protected function buildContent($record) |
|
58 | |||
59 | /** |
||
60 | * Builds the URL for the API call |
||
61 | * |
||
62 | * @return string |
||
63 | */ |
||
64 | 12 | protected function buildRequestUrl() |
|
68 | } |
||
69 |
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.