1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 | <?php /** * Class to handle autoloading other classes * * @author Christopher Han <xiphux@gmail.com> * @copyright Copyright (c) 2012 Christopher Han * @package GitPHP */ class GitPHP_AutoLoader { /** * Autoload a class * * @param string $classname class name */ public static function AutoLoad($classname) { $filename = GitPHP_AutoLoader::ClassFilename($classname); if (empty($filename)) return; $path = __DIR__ . '/' . $filename; if (is_readable($path)) require($path); } /** * Get the path to a class * * @param string $classname class name * @return string path */ public static function ClassFilename($classname) { if (empty($classname)) return null; if (strncmp($classname, 'GitPHP_', 7) !== 0) return null; $classname = substr($classname, 7); $path = ''; if (strncmp($classname, 'Controller', 10) === 0) { $path = 'controller/'; } else if (strncmp($classname, 'ProjectList', 11) === 0) { $path = 'git/projectlist/'; } else if (strncmp($classname, 'FileMimeType', 12) === 0) { $path = 'git/filemimetype/'; } else if (strpos($classname, 'Cache') !== false) { $path = 'cache/'; } else if (in_array($classname, array( 'Config', 'DebugLog', 'MessageException', 'Resource', 'Util' ))) { $path = ''; } else { $path = 'git/'; } if ((strlen($classname) > 10) && (substr_compare($classname, '_Interface', -10, 10) === 0)) { $classname = substr($classname, 0, -10); $path .= $classname . '.interface.php'; } else { $path .= $classname . '.class.php'; } return $path; } } |