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 |
||
16 | View Code Duplication | class RequiredOptionalFunctionParameterSniffTest extends BaseSniffTest |
|
17 | { |
||
18 | |||
19 | const TEST_FILE = 'sniff-examples/required_optional_function_parameters.php'; |
||
20 | |||
21 | /** |
||
22 | * testRequiredOptionalParameter |
||
23 | * |
||
24 | * @dataProvider dataRequiredOptionalParameter |
||
25 | * |
||
26 | * @param string $functionName Function name. |
||
27 | * @param string $parameterName Parameter name. |
||
28 | * @param string $requiredUpTo The last PHP version in which the parameter was still required. |
||
29 | * @param array $lines The line numbers in the test file which apply to this class. |
||
30 | * @param string $okVersion A PHP version in which to test for no violation. |
||
31 | * |
||
32 | * @return void |
||
33 | */ |
||
34 | public function testRequiredOptionalParameter($functionName, $parameterName, $requiredUpTo, $lines, $okVersion) |
||
46 | |||
47 | /** |
||
48 | * Data provider. |
||
49 | * |
||
50 | * @see testRequiredOptionalParameter() |
||
51 | * |
||
52 | * @return array |
||
53 | */ |
||
54 | public function dataRequiredOptionalParameter() |
||
61 | |||
62 | |||
63 | /** |
||
64 | * testValidParameter |
||
65 | * |
||
66 | * @dataProvider dataValidParameter |
||
67 | * |
||
68 | * @param int $line The line number. |
||
69 | * |
||
70 | * @return void |
||
71 | */ |
||
72 | public function testValidParameter($line) |
||
77 | |||
78 | /** |
||
79 | * Data provider. |
||
80 | * |
||
81 | * @see testValidParameter() |
||
82 | * |
||
83 | * @return array |
||
84 | */ |
||
85 | public function dataValidParameter() |
||
92 | |||
93 | } |
||
94 |
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.