zoukankan      html  css  js  c++  java
  • 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注册的函数厉害不?呵呵,不信,你可以做一下实验

     

  • 相关阅读:
    编译安装
    yum history使用详解(某次为解决误卸载软件的回退实验)
    centos7了解
    码云仓库中获取单个文件的超链接
    常用软件及安装目录有链接的
    rsync备份服务器部署详情
    snmpwalk命令详解
    vmware迁移虚拟机
    ngrinder脚本请求头中添加cookie后仍报未登录或者401错误问题解决
    python多进程和多线程效率比较,ProcessPoolExecutor,ThreadPoolExecutor
  • 原文地址:https://www.cnblogs.com/loveyoume/p/6024801.html
Copyright © 2011-2022 走看看