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注册的函数厉害不?呵呵,不信,你可以做一下实验

 

posted @ 2016-11-02 22:37  循环源圈  阅读(1331)  评论(0编辑  收藏  举报