Complex classes like DirHelper 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 DirHelper, and based on these observations, apply Extract Interface, too.
1 | <?php |
||
9 | class DirHelper |
||
10 | { |
||
11 | /** |
||
12 | * Check if passed path exists or not. |
||
13 | * @param string $filePath |
||
14 | * @return bool |
||
15 | */ |
||
16 | public static function isDirSafe(string $filePath) : bool |
||
24 | |||
25 | /** |
||
26 | * Check if passed path exists or try to create it. |
||
27 | * Return false if it fails to create it or if a file (and not a dir) passed as argument. |
||
28 | * @param string $filePath |
||
29 | * @param string $modeMask default '0755' |
||
30 | * @return bool |
||
31 | */ |
||
32 | public static function checkDirExistOrCreate(string $filePath, string $modeMask = '0755') : bool |
||
45 | |||
46 | /** |
||
47 | * If dir passed, check if finishes with '/' otherwise append a slash to path. |
||
48 | * If wrong or empty string passed, return '/'. |
||
49 | * @param string $path |
||
50 | * @return string |
||
51 | */ |
||
52 | public static function addFinalSlash(string $path) : string |
||
63 | |||
64 | /** |
||
65 | * for each dir passed in array, check if it finishes with '/' otherwise append a slash to path. |
||
66 | * If not dir, leave the element untouched. |
||
67 | * @param array $paths |
||
68 | * @return array |
||
69 | */ |
||
70 | public static function addFinalSlashToAllPaths(array $paths) : array |
||
78 | |||
79 | /** |
||
80 | * Check if path ends with slash '/' |
||
81 | * @param string $paths |
||
82 | * @return bool |
||
83 | */ |
||
84 | public static function endsWithSlash(string $paths) : bool |
||
88 | |||
89 | /** |
||
90 | * Check if path ends with star '*' |
||
91 | * @param string $paths |
||
92 | * @return bool |
||
93 | */ |
||
94 | public static function endsWithStar(string $paths) : bool |
||
98 | |||
99 | /** |
||
100 | * Check if path ends with $needle |
||
101 | * @param string $paths |
||
102 | * @param string $needle |
||
103 | * @return bool |
||
104 | */ |
||
105 | public static function endsWith(string $paths, string $needle) : bool |
||
118 | |||
119 | /** |
||
120 | * Check if path starts with slash '/' |
||
121 | * @param string $paths |
||
122 | * @return bool |
||
123 | */ |
||
124 | public static function startsWithSlash(string $paths) : bool |
||
128 | |||
129 | /** |
||
130 | * Check if path starts with slash $needle |
||
131 | * @param string $paths |
||
132 | * @param string $needle |
||
133 | * @return bool |
||
134 | */ |
||
135 | public static function startsWith(string $paths, string $needle) : bool |
||
148 | |||
149 | /** |
||
150 | * Find dirs matching a pattern (recursive with subdirs). |
||
151 | * Returns an array containing the matched dirs (full path and not files), |
||
152 | * an empty array if no dir matched or on error. |
||
153 | * @param string $pathPattern if is null it set to base_path()/* if exists otherwise __DIR__/*. It support glob() string pattern. |
||
154 | * @return array of dirs |
||
155 | */ |
||
156 | public static function findDirs(string $pathPattern) |
||
174 | |||
175 | /** |
||
176 | * Dir::Delete() |
||
177 | * get a dir path and remove all files and subdir in this dir. |
||
178 | * if $not_remove_dir==TRUE then when finish DO NOT REMOVE THE $directory dir. |
||
179 | * @param string $directory directory to empty |
||
180 | * @param bool $not_remove_dir TRUE if DO NOT REMOVE THE $directory dir but only files. |
||
181 | * @return bool true if success, otherwise false |
||
182 | **/ |
||
183 | public static function delete($directory, bool $not_remove_dir = false) : bool |
||
211 | |||
212 | /** |
||
213 | * Remove final slash ('/') char in dir if ends with slash. |
||
214 | * @param $directory |
||
215 | * @return string |
||
216 | */ |
||
217 | public static function removeFinalSlash($directory) : string |
||
224 | |||
225 | /** |
||
226 | * For each dir passed in array, check if not finishes with '/' otherwise remove a slash to path. |
||
227 | * If not dir, leave the element untouched. |
||
228 | * @param array $paths |
||
229 | * @return array |
||
230 | */ |
||
231 | public static function removeFinalSlashToAllPaths(array $paths) : array |
||
239 | |||
240 | /** |
||
241 | * Remove start slash ('/') char in dir if starts with slash. |
||
242 | * @param $directory |
||
243 | * @return string |
||
244 | */ |
||
245 | public static function removeStartSlash($directory) : string |
||
252 | |||
253 | /** |
||
254 | * For each dir passed in array, check if not started with '/' otherwise remove a slash to path. |
||
255 | * If not dir, leave the element untouched. |
||
256 | * @param array $paths |
||
257 | * @return array |
||
258 | */ |
||
259 | public static function removeStartSlashToAllPaths(array $paths) : array |
||
267 | |||
268 | /** |
||
269 | * Dir::copy() |
||
270 | * Copy a source directory (files and all subdirectories) to destination directory. |
||
271 | * If Destination directory doesn't exists try to create it. |
||
272 | * @param $directorySource |
||
273 | * @param $directoryDestination |
||
274 | * @param array $excludedDirectory array of path to be escluded (i.e. it will not copied to destination folder) |
||
275 | * @param \Closure|null $copied a function with two arguments ($directorySource,$directoryDestination). |
||
276 | * @return bool true if success, otherwise false |
||
277 | */ |
||
278 | public static function copy( |
||
319 | |||
320 | /** |
||
321 | * Returns whether the given path is on the local filesystem. |
||
322 | * |
||
323 | * @param string $path A path string |
||
324 | * |
||
325 | * @return boolean Returns true if the path is local, false for a URL |
||
326 | * @see https://github.com/laradic/support/blob/master/src/Path.php |
||
327 | */ |
||
328 | public static function isLocal($path) |
||
332 | |||
333 | /** |
||
334 | * Returns whether a path is absolute Unix path. |
||
335 | * |
||
336 | * @param string $path A path string |
||
337 | * |
||
338 | * @return boolean Returns true if the path is absolute unix path, false if it is |
||
339 | * relative or empty |
||
340 | */ |
||
341 | public static function isAbsoluteUnix($path) |
||
345 | |||
346 | /** |
||
347 | * Returns whether a path is absolute Windows Path. |
||
348 | * |
||
349 | * @param string $path A path string |
||
350 | * |
||
351 | * @return boolean Returns true if the path is absolute, false if it is |
||
352 | * relative or empty |
||
353 | * @see https://github.com/laradic/support/blob/master/src/Path.php |
||
354 | */ |
||
355 | public static function isAbsoluteWindows($path) |
||
376 | |||
377 | /** |
||
378 | * Returns whether a path is absolute. |
||
379 | * |
||
380 | * @param string $path A path string |
||
381 | * |
||
382 | * @return boolean Returns true if the path is absolute, false if it is |
||
383 | * relative or empty |
||
384 | */ |
||
385 | public static function isAbsolute($path) |
||
389 | |||
390 | /** |
||
391 | * Returns whether a path is relative. |
||
392 | * |
||
393 | * @param string $path A path string |
||
394 | * |
||
395 | * @return boolean Returns true if the path is relative or empty, false if |
||
396 | * it is absolute |
||
397 | * @see https://github.com/laradic/support/blob/master/src/Path.php |
||
398 | */ |
||
399 | public static function isRelative($path) |
||
403 | |||
404 | /** |
||
405 | * Joins a split file system path. |
||
406 | * |
||
407 | * @param array|string $paths |
||
408 | * |
||
409 | * @return string |
||
410 | * @see https://github.com/laradic/support/blob/master/src/Path.php |
||
411 | */ |
||
412 | public static function join(...$paths) : string |
||
426 | /** |
||
427 | * Similar to the join() method, but also normalize()'s the result |
||
428 | * |
||
429 | * @param string|array ...$paths |
||
430 | * |
||
431 | * @return string |
||
432 | * @see https://github.com/laradic/support/blob/master/src/Path.php |
||
433 | */ |
||
434 | public static function njoin(...$paths) : string |
||
438 | |||
439 | /** |
||
440 | * Canonicalizes the given path. |
||
441 | * |
||
442 | * During normalization, all slashes are replaced by forward slashes ("/"). |
||
443 | * Furthermore, all "." and ".." segments are removed as far as possible. |
||
444 | * ".." segments at the beginning of relative paths are not removed. |
||
445 | * |
||
446 | * ```php |
||
447 | * echo DirHelper::canonicalize("\webmozart\puli\..\css\style.css"); |
||
448 | * // => /webmozart/style.css |
||
449 | * |
||
450 | * echo DirHelper::canonicalize("../css/./style.css"); |
||
451 | * // => ../css/style.css |
||
452 | * ``` |
||
453 | * |
||
454 | * This method is able to deal with both UNIX and Windows paths. |
||
455 | * |
||
456 | * @param string $path A path string |
||
457 | * |
||
458 | * @return string The canonical path |
||
459 | * @see https://github.com/laradic/support/blob/master/src/Path.php |
||
460 | */ |
||
461 | public static function canonicalize($path) |
||
492 | |||
493 | /** |
||
494 | * Splits a part into its root directory and the remainder. |
||
495 | * |
||
496 | * If the path has no root directory, an empty root directory will be |
||
497 | * returned. |
||
498 | * |
||
499 | * If the root directory is a Windows style partition, the resulting root |
||
500 | * will always contain a trailing slash. |
||
501 | * |
||
502 | * list ($root, $path) = DirHelpersplit("C:/webmozart") |
||
503 | * // => array("C:/", "webmozart") |
||
504 | * |
||
505 | * list ($root, $path) = DirHelpersplit("C:") |
||
506 | * // => array("C:/", "") |
||
507 | * |
||
508 | * @param string $path The canonical path to split |
||
509 | * |
||
510 | * @return array An array with the root directory and the remaining relative |
||
511 | * path |
||
512 | * @see https://github.com/laradic/support/blob/master/src/Path.php |
||
513 | */ |
||
514 | private static function split($path) |
||
538 | } |
||
539 |
Sometimes obsolete code just ends up commented out instead of removed. In this case it is better to remove the code once you have checked you do not need it.
The code might also have been commented out for debugging purposes. In this case it is vital that someone uncomments it again or your project may behave in very unexpected ways in production.
This check looks for comments that seem to be mostly valid code and reports them.