php的spl_autoload_register函数的一点个人见解
这是一篇对spl_autoload_register()函数的个人简单介绍,有需要的同学可以参考,主要是讨论spl_autoload_register()函数所注册的函数的参数的个人一点迷惑。
废话不多说,上代码,还请同学注意看注释。
<?php //定义一个函数,功能自动加载类文件 function autoload($class){ //参数$class,不用管它,它自己会以``类的名称``作为参数 //类文件的地址,类文件的格式是$class.class.php $classPath = str_replace('\\','/',__DIR__).'/'.$class.'.class.php'; //var_dump($classPath); if(file_exists($classPath)){ include_once $classPath; } } //注册自动加载函数,此时autoload这个函数就相当于php的自动寻找类函数__autoload() spl_autoload_register('autoload'); $obj = new auto;//这个类已经存在同级目录中,我的情况 $obj->autoloader(); /*spl_autoload_register假如用在类中,则传递的参数必须包含类名和方法名 *如下面的例子: */ class loadClass{ public function loadFunction($class){ $classPath = str_replace('\\','/',__DIR__).'/'.$class.'.class.php'; if(file_exists($classPath)){ include_once $classPath; } } public function _register(){ //注册自动加载方法loadFunction spl_autoload_register('self::loadFunction'); //或者参数为数组,数组的第一个元素为类名,第二个为要注册的方法名 spl_autoload_register(array('loadClass','loadFunction')); } }
对于参数的个人经验:
关于这个函数的参数,它困扰了我一个小时,你想想,spl_autoload_register()注册的函数,它是个自动加载函数,我们是没必要直接调用它的,它会自动加载到栈区中,不能直接调用,也就是说,我们无需调用上面的autoload(),也就根本没办法给它传参数了,那么这个参数会从哪里来呢?这个在我刚刚认识spl_autoload_register()时,确实让我苦恼了一会,不过,我做了一下实验,发现这个参数确实无须传递,它自己会以你调用的类名传递过去,你实例化什么类,他就传递什么类名,就是这么智能。说到这里,感叹spl_autoload_register注册的函数厉害不?呵呵,不信,你可以做一下实验