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 |
||
19 | class Functions { |
||
20 | |||
21 | /** |
||
22 | * Size of the initialisation vector for encryption |
||
23 | * @var integer $ENCRYPTION_IV_SIZE |
||
24 | */ |
||
25 | const ENCRYPTION_IV_SIZE = 16; |
||
26 | |||
27 | /** |
||
28 | * This array contains the cached short month names, based on the cal_info functions. |
||
29 | * Retrieves the abbrevmonths values of months: Jan, Feb, Mar... |
||
30 | * |
||
31 | * @uses cal_info |
||
32 | * @var array $calendarShortMonths Cached array of abbreviated short month names |
||
33 | */ |
||
34 | private static $calendarShortMonths = array(); |
||
35 | |||
36 | /** |
||
37 | * Debug tool: prompt a Javascript pop-up with a text |
||
38 | * |
||
39 | * @param string $text Text to display |
||
40 | */ |
||
41 | static public function promptAlert($text){ |
||
46 | |||
47 | /** |
||
48 | * Return the result of a division, and a default value if denomintaor is 0 |
||
49 | * |
||
50 | * @param integer $num Numerator |
||
51 | * @param integer $denom Denominator |
||
52 | * @param float $default Default value if denominator null or 0 |
||
53 | * @return float Result of the safe division |
||
54 | */ |
||
55 | public static function safeDivision($num, $denom, $default = 0) { |
||
61 | |||
62 | /** |
||
63 | * Returns the percentage of two numbers |
||
64 | * |
||
65 | * @param int $num Numerator |
||
66 | * @param int $denom Denominator |
||
67 | * @param float $default Default value if denominator null or 0 |
||
68 | * @return float Percentage |
||
69 | */ |
||
70 | public static function getPercentage($num, $denom, $default = 0){ |
||
73 | |||
74 | /** |
||
75 | * Get width and heigth of an image resized in order fit a target size. |
||
76 | * |
||
77 | * @param string $file The image to resize |
||
78 | * @param int $target The final max width/height |
||
79 | * @return array array of ($width, $height). One of them must be $target |
||
80 | */ |
||
81 | static public function getResizedImageSize($file, $target=25){ |
||
89 | |||
90 | |||
91 | /** |
||
92 | * Checks if a table exist in the DB schema |
||
93 | * |
||
94 | * @param string $table Name of the table to look for |
||
95 | * @return boolean Does the table exist |
||
96 | */ |
||
97 | public static function doesTableExist($table) { |
||
105 | |||
106 | /** |
||
107 | * Returns a randomy generated token of a given size |
||
108 | * |
||
109 | * @param int $length Length of the token, default to 32 |
||
110 | * @return string Random token |
||
111 | */ |
||
112 | public static function generateRandomToken($length=32) { |
||
131 | |||
132 | /** |
||
133 | * Checks whether the installation meets the requirements for encryption/decryption. |
||
134 | * |
||
135 | * @return boolean |
||
136 | */ |
||
137 | public static function isEncryptionCompatible() { |
||
140 | |||
141 | /** |
||
142 | * Encrypt a text, and encode it to base64 compatible with URL use |
||
143 | * (no +, no /, no =) |
||
144 | * |
||
145 | * @param string $data Text to encrypt |
||
146 | * @return string Encrypted and encoded text |
||
147 | */ |
||
148 | public static function encryptToSafeBase64($data){ |
||
164 | |||
165 | /** |
||
166 | * Decode and encrypt a text from base64 compatible with URL use |
||
167 | * |
||
168 | * @param string $encrypted Text to decrypt |
||
169 | * @return string Decrypted text |
||
170 | */ |
||
171 | public static function decryptFromSafeBase64($encrypted){ |
||
191 | |||
192 | /** |
||
193 | * Encode a string from the file system encoding to UTF-8 (if necessary) |
||
194 | * |
||
195 | * @param string $string Filesystem encoded string to encode |
||
196 | * @return string UTF-8 encoded string |
||
197 | */ |
||
198 | public static function encodeFileSystemToUtf8($string){ |
||
204 | |||
205 | /** |
||
206 | * Encode a string from UTF-8 to the file system encoding (if necessary) |
||
207 | * |
||
208 | * @param string $string UTF-8 encoded string to encode |
||
209 | * @return string Filesystem encoded string |
||
210 | */ |
||
211 | public static function encodeUtf8ToFileSystem($string){ |
||
217 | |||
218 | /** |
||
219 | * Check whether a path is under a valid form. |
||
220 | * |
||
221 | * @param string $filename Filename path to check |
||
222 | * @param boolean $acceptfolder Should folders be accepted? |
||
223 | * @return boolean True if path valid |
||
224 | */ |
||
225 | public static function isValidPath($filename, $acceptfolder = FALSE) { |
||
229 | |||
230 | /** |
||
231 | * Return short names for the months of the specific calendar. |
||
232 | * |
||
233 | * @see \cal_info() |
||
234 | * @param integer $calendarId Calendar ID (according to PHP cal_info) |
||
235 | * @return array Array of month short names |
||
236 | */ |
||
237 | public static function getCalendarShortMonths($calendarId = 0) { |
||
244 | |||
245 | /** |
||
246 | * Returns the generation associated with a Sosa number |
||
247 | * |
||
248 | * @param int $sosa Sosa number |
||
249 | * @return number |
||
250 | */ |
||
251 | public static function getGeneration($sosa){ |
||
254 | |||
255 | |||
256 | |||
257 | |||
258 | /** |
||
259 | * Returns whether the image type is supported by the system, and if so, return the standardised type |
||
260 | * |
||
261 | * @param string $reqtype Extension to test |
||
262 | * @return boolean|string Is supported? |
||
263 | */ |
||
264 | public static function isImageTypeSupported($reqtype) { |
||
280 | |||
281 | } |
||
282 |
In PHP, under loose comparison (like
==
, or!=
, orswitch
conditions), values of different types might be equal.For
string
values, the empty string''
is a special case, in particular the following results might be unexpected: