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 |
||
18 | class UsersController extends ResourceController |
||
19 | { |
||
20 | public function setContainer(ContainerInterface $container = null) |
||
25 | |||
26 | /** |
||
27 | * @ApiDoc( |
||
28 | * resource=true, |
||
29 | * description="Liste les utilisateurs", |
||
30 | * output="KI\UserBundle\Entity\User", |
||
31 | * statusCodes={ |
||
32 | * 200="Requête traitée avec succès", |
||
33 | * 401="Une authentification est nécessaire pour effectuer cette action", |
||
34 | * 403="Pas les droits suffisants pour effectuer cette action", |
||
35 | * 503="Service temporairement indisponible ou en maintenance", |
||
36 | * }, |
||
37 | * section="Utilisateurs" |
||
38 | * ) |
||
39 | * @Route("/users") |
||
40 | * @Method("GET") |
||
41 | */ |
||
42 | public function getUsersAction() |
||
46 | |||
47 | /** |
||
48 | * @ApiDoc( |
||
49 | * description="Retourne un utilisateur", |
||
50 | * output="KI\UserBundle\Entity\User", |
||
51 | * statusCodes={ |
||
52 | * 200="Requête traitée avec succès", |
||
53 | * 401="Une authentification est nécessaire pour effectuer cette action", |
||
54 | * 403="Pas les droits suffisants pour effectuer cette action", |
||
55 | * 404="Ressource non trouvée", |
||
56 | * 503="Service temporairement indisponible ou en maintenance", |
||
57 | * }, |
||
58 | * section="Utilisateurs" |
||
59 | * ) |
||
60 | * @Route("/users/{slug}") |
||
61 | * @Method("GET") |
||
62 | */ |
||
63 | public function getUserAction($slug) |
||
69 | |||
70 | /** |
||
71 | * @ApiDoc( |
||
72 | * description="Modifie un utilisateur", |
||
73 | * input="KI\UserBundle\Form\UserType", |
||
74 | * statusCodes={ |
||
75 | * 204="Requête traitée avec succès mais pas d’information à renvoyer", |
||
76 | * 400="La syntaxe de la requête est erronée", |
||
77 | * 401="Une authentification est nécessaire pour effectuer cette action", |
||
78 | * 403="Pas les droits suffisants pour effectuer cette action", |
||
79 | * 404="Ressource non trouvée", |
||
80 | * 503="Service temporairement indisponible ou en maintenance", |
||
81 | * }, |
||
82 | * section="Utilisateurs" |
||
83 | * ) |
||
84 | * @Route("/users/{slug}") |
||
85 | * @Method("PATCH") |
||
86 | */ |
||
87 | public function patchUserAction(Request $request, $slug) |
||
117 | |||
118 | /** |
||
119 | * @ApiDoc( |
||
120 | * description="Supprime un utilisateur", |
||
121 | * statusCodes={ |
||
122 | * 204="Requête traitée avec succès mais pas d’information à renvoyer", |
||
123 | * 401="Une authentification est nécessaire pour effectuer cette action", |
||
124 | * 403="Pas les droits suffisants pour effectuer cette action", |
||
125 | * 404="Ressource non trouvée", |
||
126 | * 503="Service temporairement indisponible ou en maintenance", |
||
127 | * }, |
||
128 | * section="Utilisateurs" |
||
129 | * ) |
||
130 | * @Route("/users/{slug}") |
||
131 | * @Method("DELETE") |
||
132 | */ |
||
133 | public function deleteUserAction($slug) |
||
144 | |||
145 | /** |
||
146 | * @ApiDoc( |
||
147 | * description="Récupère la liste des clubs dont l'utilisateur est membre", |
||
148 | * output="KI\UserBundle\Entity\Club", |
||
149 | * statusCodes={ |
||
150 | * 200="Requête traitée avec succès", |
||
151 | * 401="Une authentification est nécessaire pour effectuer cette action", |
||
152 | * 403="Pas les droits suffisants pour effectuer cette action", |
||
153 | * 404="Ressource non trouvée", |
||
154 | * 503="Service temporairement indisponible ou en maintenance", |
||
155 | * }, |
||
156 | * section="Utilisateurs" |
||
157 | * ) |
||
158 | * @Route("/users/{slug}/clubs") |
||
159 | * @Method("GET") |
||
160 | */ |
||
161 | public function getUserClubsAction($slug) |
||
169 | |||
170 | /** |
||
171 | * @ApiDoc( |
||
172 | * description="Crée un compte et envoie un mail avec le mot de passe", |
||
173 | * requirements={ |
||
174 | * { |
||
175 | * "name"="firstName", |
||
176 | * "dataType"="string", |
||
177 | * "description"="Prénom" |
||
178 | * }, |
||
179 | * { |
||
180 | * "name"="lastName", |
||
181 | * "dataType"="string", |
||
182 | * "description"="Nom" |
||
183 | * }, |
||
184 | * { |
||
185 | * "name"="email", |
||
186 | * "dataType"="string", |
||
187 | * "description"="Adresse email" |
||
188 | * }, |
||
189 | * }, |
||
190 | * statusCodes={ |
||
191 | * 201="Requête traitée avec succès avec création d’un document", |
||
192 | * 503="Service temporairement indisponible ou en maintenance", |
||
193 | * }, |
||
194 | * section="Utilisateurs" |
||
195 | * ) |
||
196 | * @Route("/users") |
||
197 | * @Method("POST") |
||
198 | */ |
||
199 | public function postUsersAction(Request $request) |
||
245 | |||
246 | /** |
||
247 | * @ApiDoc( |
||
248 | * description="Crée un compte et envoie un mail avec le mot de passe", |
||
249 | * requirements={ |
||
250 | * { |
||
251 | * "name"="users", |
||
252 | * "dataType"="file", |
||
253 | * "description"="Prénom" |
||
254 | * }, |
||
255 | * }, |
||
256 | * statusCodes={ |
||
257 | * 201="Requête traitée avec succès avec création d’un document", |
||
258 | * 503="Service temporairement indisponible ou en maintenance", |
||
259 | * }, |
||
260 | * section="Utilisateurs" |
||
261 | * ) |
||
262 | * @Route("/import/users") |
||
263 | * @Method("POST") |
||
264 | */ |
||
265 | public function importUsersAction(Request $request) |
||
345 | |||
346 | private function stripAccents($string) |
||
353 | } |
||
354 |
This check looks for variable assignements that are either overwritten by other assignments or where the variable is not used subsequently.
Both the
$myVar
assignment in line 1 and the$higher
assignment in line 2 are dead. The first because$myVar
is never used and the second because$higher
is always overwritten for every possible time line.