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 |
||
| 10 | class JukeboxService |
||
| 11 | { |
||
| 12 | /** @var JukeboxMap[] */ |
||
| 13 | protected $mapQueue = []; |
||
| 14 | |||
| 15 | /** |
||
| 16 | * @var PlayerStorage |
||
| 17 | */ |
||
| 18 | private $playerStorage; |
||
| 19 | /** |
||
| 20 | * @var AdminGroups |
||
| 21 | */ |
||
| 22 | private $adminGroups; |
||
| 23 | |||
| 24 | /** |
||
| 25 | * JukeboxService constructor. |
||
| 26 | * @param PlayerStorage $playerStorage |
||
| 27 | * @param AdminGroups $adminGroups |
||
| 28 | */ |
||
| 29 | public function __construct(PlayerStorage $playerStorage, AdminGroups $adminGroups) |
||
| 34 | |||
| 35 | /** |
||
| 36 | * @return JukeboxMap[] |
||
| 37 | */ |
||
| 38 | public function getMapQueue() |
||
| 42 | |||
| 43 | /** |
||
| 44 | * @return JukeboxMap|null |
||
| 45 | */ |
||
| 46 | public function getFirst() |
||
| 52 | |||
| 53 | /** |
||
| 54 | * Adds map as last item |
||
| 55 | * @param Map $map |
||
| 56 | * @param null $login |
||
| 57 | * @param bool $force |
||
| 58 | * @return bool |
||
| 59 | */ |
||
| 60 | |||
| 61 | View Code Duplication | public function addMap(Map $map, $login = null, $force = false) |
|
| 95 | |||
| 96 | /** |
||
| 97 | * Adds Map as first item |
||
| 98 | * @param Map $map |
||
| 99 | * @param null $login |
||
| 100 | * @param bool $force |
||
| 101 | * @return bool |
||
| 102 | */ |
||
| 103 | |||
| 104 | View Code Duplication | public function addMapFirst(Map $map, $login = null, $force = false) |
|
| 138 | |||
| 139 | /** |
||
| 140 | * @param Map $map |
||
| 141 | * @param $login |
||
| 142 | * @param bool $force |
||
| 143 | * @return false; |
||
| 144 | */ |
||
| 145 | public function removeMap(Map $map, $login = null, $force = false) |
||
| 170 | |||
| 171 | /** |
||
| 172 | * @param JukeboxMap $map |
||
| 173 | */ |
||
| 174 | private function add(JukeboxMap $map) |
||
| 178 | |||
| 179 | /** |
||
| 180 | * @param JukeboxMap $map |
||
| 181 | */ |
||
| 182 | private function addFirst(JukeboxMap $map) |
||
| 186 | |||
| 187 | /** |
||
| 188 | * @param $login |
||
| 189 | * @return bool|JukeboxMap |
||
| 190 | */ |
||
| 191 | public function getMap($login) |
||
| 201 | |||
| 202 | /** |
||
| 203 | * @param Map $map |
||
| 204 | * |
||
| 205 | * @return bool |
||
| 206 | */ |
||
| 207 | View Code Duplication | private function remove(Map $map) |
|
| 219 | |||
| 220 | |||
| 221 | /** |
||
| 222 | * checks if login exists on queue |
||
| 223 | * @param string $login |
||
| 224 | * @return bool |
||
| 225 | */ |
||
| 226 | private function checkLogin($login) |
||
| 236 | |||
| 237 | /** |
||
| 238 | * checks if map exists on queue |
||
| 239 | * @param Map $map |
||
| 240 | * @return bool |
||
| 241 | */ |
||
| 242 | View Code Duplication | private function checkMap(Map $map) |
|
| 252 | |||
| 253 | /** |
||
| 254 | * |
||
| 255 | */ |
||
| 256 | public function clearMapQueue() |
||
| 260 | |||
| 261 | } |
||
| 262 |
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.