PHP实现自动加载,有两种方法:①魔术函数__autoload()②spl扩展spl_autoload_register例子分别为:1.__autoloadprintit.class.php:1doPrint();每次运行index.php,我们都会正常输出helloworld,虽然我们并没有在index.php中引入printit.class。php文件,但我们仍然可以使用PRINTIT类中的方法。在index.php中,由于没有包含printit.class.php,所以在实例化printit时,会自动调用__autoload函数,参数$class的值为类名printit,这里引入printit.class.php时间。这种方法在面向对象中经常使用,可以避免编写过多的引用文件,使整个系统更加灵活。2.spl_autoload_register()做打印();将__autoload替换为loadprint函数。但是loadprint不会像__autoload那样自动触发,这时spl_autoload_register()就会起作用,它告诉PHP遇到未定义的类就执行loadprint()。spl_autoload_register()调用静态方法。doPrint();注:SPL是StandardPHPLibrary(StandardPHPLibrary的缩写)。它是PHP5引入的一个扩展库。其主要功能包括自动加载机制的实现和各种Iterator接口或类。SPL自动加载机制的实现是通过将函数指针autoload_func指向具有自动加载功能的自实现函数来实现的。SPL有两个不同的函数spl_autoload、spl_autoload_call,通过将autoload_func指向这两个不同的函数地址来实现不同的自动加载机制。classLoad{functionstaticloadClass($class_name){$filename=$class_name.".class.php";$path="include/".$filenameif(is_file($path))returninclude$path;}}/***设置对象的自动加载*spl_autoload_register—将给定函数注册为__autoload()实现*/spl_autoload_register(array('LOAD','loadClass'));/***__autoload方法将在spl_autoload_register之后失效,因为autoload_func函数指针已经指向了spl_autoload方法*可以将_autoload方法添加到autoload_functions列表中*/spl_autoload_register('__autoload');如果你同时用spl_autoload_register注册了一个类方法和__autoload函数,那么按照注册的先后顺序,如果类文件是在第一个注册的方法或函数中加载的,那么第二个注册类的方法或函数就不会加载被执行。否则,将执行第二个注册类的方法或函数。
