看到一篇不错的博文,转载于此,可以通过spl_autoload_register()这个自动加载函数来了解PHP的类自动加载原理。在了解这个函数之前,我们先来看另一个函数:__autoload。1.__autoload这是一个自动加载函数。在PHP5中,当我们实例化一个未定义的类时,就会触发这个函数。请参阅以下示例:printit.class.phpindex.phpdoPrint();?>运行index.php后,正常输出helloworld。在index.php中,由于没有包含printit.class.php,所以在实例化printit时,会自动调用__autoload函数,参数$class的值为类名printit,这里引入printit.class.php时间。这种方法在面向对象中经常使用,可以避免编写过多的引用文件,使整个系统更加灵活。2.spl_autoload_register()再看spl_autoload_register()。此函数与__autoload具有相同的效果。让我们看一个简单的例子:doPrint();?>将__autoload替换为loadprint函数。但是loadprint不会像__autoload那样自动触发,这时spl_autoload_register()就会起作用,它告诉PHP遇到未定义的类就执行loadprint()。spl_autoload_register()调用静态方法doPrint();?>总结:__autoload在实例化时会自动触发。如果没有要执行的对象,就会执行spl_autoload_register方法。三、composer类自动加载研究vendor/autoload.php=50600&&!defined('HHVM_VERSION')&&(!function_exists('zend_loader_file_encoded')||!zend_loader_file_encoded());如果($useStaticLoader){require_once__DIR__。'/autoload_static.php';call_user_func(\Composer\Autoload\ComposerStaticInit83cb48187cf44a304a7a6be5e700ede3::getInitializer($loader));}else{$map=require__DIR__.'/autoload_namespaces.php';foreach($mapas$namespace=>$path){$loader->set($namespace,$path);}$map=需要__DIR__。'/autoload_psr4.php';foreach($mapas$namespace=>$path){$loader->setPsr4($namespace,$path);}$classMap=需要__DIR__。'/autoload_classmap.php';如果($classMap){$loader->addClassMap($classMap);}}$loader->register(true);返回$装载机;}}