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:
Complex classes like Is often do a lot of different things. To break such a class down, we need to identify a cohesive component within that class. A common approach to find such a component is to look for fields/methods that share the same prefixes, or suffixes. You can also have a look at the cohesion graph to spot any un-connected, or weakly-connected components.
Once you have determined the fields that belong together, you can apply the Extract Class refactoring. If the component makes sense as a sub-class, Extract Subclass is also a candidate, and is often faster.
While breaking up the class, it is a good idea to analyze how other classes use Is, and based on these observations, apply Extract Interface, too.
1 | <?php |
||
7 | class Is |
||
|
|||
8 | { |
||
9 | /** |
||
10 | * Vérifie si le paramètre est un ID correct |
||
11 | * @param mixed $valeur : La variable testée |
||
12 | * @return bool : VRAI si le paramètre est un entier positif (0 toléré) |
||
13 | */ |
||
14 | View Code Duplication | public static function id($valeur) |
|
23 | |||
24 | /** |
||
25 | * Vérifie si le paramètre est un entier |
||
26 | * @param mixed $valeur : La variable testée |
||
27 | * @return bool : VRAI si le paramètre est un entier |
||
28 | */ |
||
29 | View Code Duplication | public static function integer($valeur) |
|
38 | |||
39 | /** |
||
40 | * Vérifie si la valeur décimale du paramètre est égale à un demi de un |
||
41 | * @param mixed $valeur : La variable testée |
||
42 | * @return bool : VRAI si la valeur décimale du paramètre est égale à un demi de un |
||
43 | */ |
||
44 | public static function half($valeur) |
||
48 | |||
49 | /** |
||
50 | * Vérifie si le paramètre est un décimal |
||
51 | * @param mixed $valeur : La variable testée |
||
52 | * @return bool : VRAI si le paramètre est un décimal (virgule ou point acceptés) |
||
53 | */ |
||
54 | View Code Duplication | public static function decimal($valeur) |
|
63 | |||
64 | /** |
||
65 | * Cette fonction teste si le paramètre est true ou false |
||
66 | * @param mixed $valeur : La variable testée |
||
67 | * @return bool : VRAI si le paramètre est un booléen |
||
68 | */ |
||
69 | public static function booleen($valeur) |
||
77 | |||
78 | /** |
||
79 | * Cette fonction teste si le paramètre un nombre pair |
||
80 | * @param mixed $valeur : La variable testée |
||
81 | * @return bool : VRAI si le paramètre est un nombre et qu'il est pair |
||
82 | */ |
||
83 | public static function pair($valeur) |
||
91 | |||
92 | /** |
||
93 | * Cette fonction teste le type du paramètre |
||
94 | * @param mixed $valeur : La variable testée |
||
95 | * @return bool : VRAI si le paramètre n'est pas un tableau, un booléen ou un objet |
||
96 | */ |
||
97 | public static function chaineOuNombre($valeur) |
||
101 | |||
102 | /** |
||
103 | * Teste si le paramètre passé est alphanumérique |
||
104 | * @param string $valeur : La valeur doit être comprise entre "0" et "9", "A" et "z", "a" et "z" ou être "_" |
||
105 | * @return : VRAI si la valeur passée en paramètre est alphanumérique |
||
106 | */ |
||
107 | View Code Duplication | public static function alphaNumerique($valeur) |
|
116 | |||
117 | /** |
||
118 | * Fonction vérifiant le numéro de téléphone passé en paramètre |
||
119 | * @param mixed $valeur : La variable testée |
||
120 | * @return bool |
||
121 | * VRAI si la chaine passée en paramètre est un numéro de téléphone |
||
122 | * valide faisant de 10 à 20 caractères, |
||
123 | * espaces, "+" et "." tolérés |
||
124 | */ |
||
125 | View Code Duplication | public static function telephone($valeur) |
|
134 | |||
135 | /** |
||
136 | * Fonction vérifiant le numéro de téléphone portable |
||
137 | * @param mixed $valeur : La variable testée |
||
138 | * @return bool |
||
139 | * VRAI si le paramètre est une chaine numérique de 10 caractères commençant par 06 ou 07, |
||
140 | * pas de séparateur toléré |
||
141 | */ |
||
142 | View Code Duplication | public static function telephonePortable($valeur) |
|
151 | |||
152 | /** |
||
153 | * Fonction déterminant si une valeur est un numéro de compte général |
||
154 | * @param mixed $valeur : La variable testée |
||
155 | * @return bool : VRAI si le paramètre est une chaine numérique de 14 caractères maximum |
||
156 | */ |
||
157 | View Code Duplication | public static function compteGeneral($valeur) |
|
166 | |||
167 | /** |
||
168 | * Fonction déterminant si une valeur est un numéro de compte tiers |
||
169 | * @param mixed $valeur : La variable testée |
||
170 | * @return bool : VRAI si le paramètre est une chaine alphanumérique de 17 caractères maximum |
||
171 | */ |
||
172 | View Code Duplication | public static function compteTiers($valeur) |
|
181 | |||
182 | /** |
||
183 | * Valide que la date donnée au format français (SANS heure) existe bien |
||
184 | * @param mixed $valeur : La variable testée |
||
185 | * @return bool |
||
186 | * VRAI si la valeur passée en paramètre une date au format JJ/MM/AAAA ou JJ/MM/AA |
||
187 | * avec comme séparateur / ou . ou - |
||
188 | */ |
||
189 | View Code Duplication | public static function date($valeur) |
|
205 | |||
206 | /** |
||
207 | * Valide que la date donnée au format français (SANS heure) existe bien |
||
208 | * @param mixed $valeur : La variable testée |
||
209 | * @return bool : VRAI si la valeur passée en paramètre une date au format JJMMAAAA ou JJMMAA, sans séparateur |
||
210 | */ |
||
211 | public static function dateWithoutSeparator($valeur) |
||
240 | |||
241 | /** |
||
242 | * Valide que la date donnée au format américain (SANS heure) existe bien |
||
243 | * @param mixed $valeur : La variable testée |
||
244 | * @return bool |
||
245 | * VRAI si la valeur passée en paramètre une date zu format AAAA-MM-JJ ou AA-MM-JJ |
||
246 | * avec comme séparateur / ou . ou - |
||
247 | */ |
||
248 | View Code Duplication | public static function dateUk($valeur) |
|
264 | |||
265 | /** |
||
266 | * Valide que la date donnée au format français (avec ou sans heure) existe bien |
||
267 | * @param mixed $valeur : La variable testée |
||
268 | * @return bool |
||
269 | * VRAI si la valeur passée en paramètre une date au format JJ/MM/AAAA ou JJ/MM/AA |
||
270 | * avec comme séparateur / ou . ou - |
||
271 | */ |
||
272 | View Code Duplication | public static function dateTime($valeur) |
|
285 | |||
286 | /** |
||
287 | * Valide que la date donnée au format américain (avec ou sans heure) existe bien |
||
288 | * @param mixed $valeur : La variable testée |
||
289 | * @return bool |
||
290 | * VRAI si la valeur passée en paramètre une date au format AAAA-MM-JJ ou AA-MM-JJ |
||
291 | * avec comme séparateur / ou . ou - |
||
292 | */ |
||
293 | View Code Duplication | public static function dateTimeUk($valeur) |
|
309 | |||
310 | /** |
||
311 | * Teste si la chaine passée en paramètre est une adresse email valide |
||
312 | * @param mixed $valeur : La variable testée |
||
313 | * @return bool : VRAI si la valeur passée en paramètre est une adresse email valide |
||
314 | */ |
||
315 | public static function courriel($valeur) |
||
327 | |||
328 | /** |
||
329 | * Teste si la chaine passée en paramètre est une heure valide |
||
330 | * @param mixed $valeur : La variable testée |
||
331 | * @return bool |
||
332 | * VRAI si la valeur passée en paramètre est une heure valide |
||
333 | * sous la forme hh:mm:ss, secondes non obligatoires |
||
334 | */ |
||
335 | View Code Duplication | public static function heure($valeur) |
|
344 | |||
345 | /** |
||
346 | * Teste si la chaine passée en paramètre est un RIB valide |
||
347 | * @param mixed $valeur : La variable testée |
||
348 | * @return bool |
||
349 | * VRAI si la valeur passée en paramètre est un RIB valide |
||
350 | * (chaine texte de 24 caractères, espaces bien placés tolérés) |
||
351 | */ |
||
352 | public static function rib(&$valeur) |
||
381 | } |
||
382 |
You can fix this by adding a namespace to your class:
When choosing a vendor namespace, try to pick something that is not too generic to avoid conflicts with other libraries.