/** * Internal autoloader for spl_autoload_register(). * * @param string $class */ public static function autoload($class) { // Don't interfere with other autoloaders if (0 !== strpos($class, 'Xxx_')) {#以Xxx开头的类 才往下执行,否则返回 return; } #./Xxx/abc/a.php $path = dirname(__FILE__).'/'.str_replace('_', '/', $class).'.php';#把类名中 _替换成目录 if (!file_exists($path)) { return; } require $path;#加载文件 if (self::$inits && !self::$initialized) { self::$initialized = true;#只回调一次 foreach (self::$inits as $init) { call_user_func($init);#执行方法 } } }
<?php if (class_exists('Xxx', false)) {#类存在则不执行以后的代码,否则执行。且类不存在时是不触发自动加载器的 #避免了类不重复定义的错误 return; } //加载类 require dirname(__FILE__).'/classes/Xxx.php'; if (!function_exists('_Xxxmailer_init')) {#方法不存在则定义方法 function _Xxxmailer_init() { require dirname(__FILE__).'/Xxx_init.php'; } } //注册自动加载器 Xxx::registerAutoload('_Xxxmailer_init');