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 |
||
| 26 | class MenuItem |
||
| 27 | { |
||
| 28 | /** |
||
| 29 | * @var string |
||
| 30 | */ |
||
| 31 | protected $name; |
||
| 32 | |||
| 33 | /** |
||
| 34 | * @var string |
||
| 35 | */ |
||
| 36 | protected $caption; |
||
| 37 | |||
| 38 | /** |
||
| 39 | * @var string |
||
| 40 | */ |
||
| 41 | protected $description; |
||
| 42 | |||
| 43 | /** |
||
| 44 | * @var string |
||
| 45 | */ |
||
| 46 | protected $routeName; |
||
| 47 | |||
| 48 | /** |
||
| 49 | * @var array |
||
| 50 | */ |
||
| 51 | protected $routeParams = []; |
||
| 52 | |||
| 53 | /** |
||
| 54 | * @var string |
||
| 55 | */ |
||
| 56 | protected $icon; |
||
| 57 | |||
| 58 | /** |
||
| 59 | * @var string |
||
| 60 | */ |
||
| 61 | protected $color; |
||
| 62 | |||
| 63 | /** |
||
| 64 | * @var Collection |
||
| 65 | */ |
||
| 66 | protected $children; |
||
| 67 | |||
| 68 | /** |
||
| 69 | * @var MenuItem|null |
||
| 70 | */ |
||
| 71 | protected $parent; |
||
| 72 | |||
| 73 | /** |
||
| 74 | * @var integer |
||
| 75 | */ |
||
| 76 | protected $priority; |
||
| 77 | |||
| 78 | /** |
||
| 79 | * MenuItem constructor |
||
| 80 | */ |
||
| 81 | public function __construct() |
||
| 87 | |||
| 88 | /** |
||
| 89 | * @return string |
||
| 90 | */ |
||
| 91 | public function getName() |
||
| 95 | |||
| 96 | /** |
||
| 97 | * @param string $name |
||
| 98 | * @return MenuItem |
||
| 99 | */ |
||
| 100 | public function setName($name) |
||
| 105 | |||
| 106 | /** |
||
| 107 | * @return string |
||
| 108 | */ |
||
| 109 | public function getCaption() |
||
| 113 | |||
| 114 | /** |
||
| 115 | * @param string $caption |
||
| 116 | * @return MenuItem |
||
| 117 | */ |
||
| 118 | public function setCaption($caption) |
||
| 123 | |||
| 124 | /** |
||
| 125 | * @return string |
||
| 126 | */ |
||
| 127 | public function getDescription() |
||
| 131 | |||
| 132 | /** |
||
| 133 | * @param string $description |
||
| 134 | * @return MenuItem |
||
| 135 | */ |
||
| 136 | public function setDescription($description) |
||
| 141 | |||
| 142 | /** |
||
| 143 | * @return string |
||
| 144 | */ |
||
| 145 | public function getRouteName() |
||
| 149 | |||
| 150 | /** |
||
| 151 | * @param string $routeName |
||
| 152 | * @return MenuItem |
||
| 153 | */ |
||
| 154 | public function setRouteName($routeName) |
||
| 159 | |||
| 160 | /** |
||
| 161 | * @return array |
||
| 162 | */ |
||
| 163 | public function getRouteParams() |
||
| 167 | |||
| 168 | /** |
||
| 169 | * @param array $routeParams |
||
| 170 | * @return MenuItem |
||
| 171 | */ |
||
| 172 | public function setRouteParams($routeParams) |
||
| 177 | |||
| 178 | /** |
||
| 179 | * @return string |
||
| 180 | */ |
||
| 181 | public function getIcon() |
||
| 185 | |||
| 186 | /** |
||
| 187 | * @param string $icon |
||
| 188 | * @return MenuItem |
||
| 189 | */ |
||
| 190 | public function setIcon($icon) |
||
| 195 | |||
| 196 | /** |
||
| 197 | * @return string |
||
| 198 | */ |
||
| 199 | public function getColor() |
||
| 203 | |||
| 204 | /** |
||
| 205 | * @param string $color |
||
| 206 | * @return MenuItem |
||
| 207 | */ |
||
| 208 | public function setColor($color) |
||
| 213 | |||
| 214 | /** |
||
| 215 | * @return Collection |
||
| 216 | */ |
||
| 217 | public function getChildren() |
||
| 221 | |||
| 222 | /** |
||
| 223 | * @param MenuItem $child |
||
| 224 | * @return MenuItem |
||
| 225 | */ |
||
| 226 | public function addChild(MenuItem $child) |
||
| 242 | |||
| 243 | /** |
||
| 244 | * @param MenuItem $child |
||
| 245 | * @return MenuItem |
||
| 246 | */ |
||
| 247 | public function removeChild(MenuItem $child) |
||
| 255 | |||
| 256 | /** |
||
| 257 | * @return MenuItem|null |
||
| 258 | */ |
||
| 259 | public function getParent() |
||
| 263 | |||
| 264 | /** |
||
| 265 | * @param MenuItem|null $parent |
||
| 266 | * @return MenuItem |
||
| 267 | */ |
||
| 268 | public function setParent(MenuItem $parent) |
||
| 273 | |||
| 274 | /** |
||
| 275 | * @return int |
||
| 276 | */ |
||
| 277 | public function getPriority() |
||
| 281 | |||
| 282 | /** |
||
| 283 | * @param int $priority |
||
| 284 | * @return MenuItem |
||
| 285 | */ |
||
| 286 | public function setPriority($priority) |
||
| 291 | |||
| 292 | /** |
||
| 293 | * @return MenuItem[] |
||
| 294 | */ |
||
| 295 | View Code Duplication | public function getPath() |
|
| 307 | } |
||
| 308 |
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.