Complex classes like WP_Filesystem_MockFS 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 WP_Filesystem_MockFS, and based on these observations, apply Extract Interface, too.
| 1 | <?php |
||
| 2 | class WP_Filesystem_MockFS extends WP_Filesystem_Base { |
||
| 3 | private $cwd; |
||
| 4 | |||
| 5 | // Holds a array of objects which contain an array of objects, etc. |
||
| 6 | private $fs = null; |
||
| 7 | |||
| 8 | // Holds a array of /path/to/file.php and /path/to/dir/ map to an object in $fs above |
||
| 9 | // a fast more efficient way of determining if a path exists, and access to that node |
||
| 10 | private $fs_map = array(); |
||
| 11 | |||
| 12 | public $verbose = false; // Enable to debug WP_Filesystem_Base::find_folder() / etc. |
||
| 13 | public $errors = array(); |
||
| 14 | public $method = 'MockFS'; |
||
| 15 | |||
| 16 | function __construct() {} |
||
| 17 | |||
| 18 | function connect() { |
||
| 21 | |||
| 22 | // Copy of core's function, but accepts a path. |
||
| 23 | function abspath( $path = false ) { |
||
| 33 | |||
| 34 | // Mock FS specific functions: |
||
| 35 | |||
| 36 | /** |
||
| 37 | * Sets initial filesystem environment and/or clears the current environment. |
||
| 38 | * Can also be passed the initial filesystem to be setup which is passed to self::setfs() |
||
| 39 | */ |
||
| 40 | function init( $paths = '', $home_dir = '/' ) { |
||
| 49 | |||
| 50 | /** |
||
| 51 | * "Bulk Loads" a filesystem into the internal virtual filesystem |
||
| 52 | */ |
||
| 53 | function setfs( $paths ) { |
||
| 72 | |||
| 73 | /** |
||
| 74 | * Locates a filesystem "node" |
||
| 75 | */ |
||
| 76 | private function locate_node( $path ) { |
||
| 79 | |||
| 80 | /** |
||
| 81 | * Locates a filesystem node for the parent of the given item |
||
| 82 | */ |
||
| 83 | private function locate_parent_node( $path ) { |
||
| 87 | |||
| 88 | // Here starteth the WP_Filesystem functions. |
||
| 89 | |||
| 90 | function mkdir( $path, /* Optional args are ignored */ $chmod = false, $chown = false, $chgrp = false ) { |
||
| 109 | |||
| 110 | function put_contents( $path, $contents = '', $mode = null ) { |
||
| 120 | |||
| 121 | function get_contents( $file ) { |
||
| 126 | |||
| 127 | function cwd() { |
||
| 130 | |||
| 131 | function chdir( $path ) { |
||
| 138 | |||
| 139 | function exists( $path ) { |
||
| 142 | |||
| 143 | function is_file( $file ) { |
||
| 146 | |||
| 147 | function is_dir( $path ) { |
||
| 152 | |||
| 153 | function dirlist( $path = '.', $include_hidden = true, $recursive = false ) { |
||
| 193 | |||
| 194 | } |
||
| 195 | |||
| 228 | } |
Adding explicit visibility (
private,protected, orpublic) is generally recommend to communicate to other developers how, and from where this method is intended to be used.