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

     

  • 相关阅读:
    记录一次.Net框架Bug发现和提交过程:.Net Framework和.Net Core均受影响
    浅谈 Angular 项目实战
    Angular CLI 升级 6.0 之后遇到的问题
    构建具有用户身份认证的 Ionic 应用
    关于 Angular 跨域请求携带 Cookie 的问题
    使用 ng build 构建后资源地址引用错误的问题
    React 系列教程 1:实现 Animate.css 官网效果
    如何在已有的 Web 应用中使用 ReactJS
    关于浏览器后退操作与页面缓存问题
    三阶魔方公式速记
  • 原文地址:https://www.cnblogs.com/loveyoume/p/6024801.html
Copyright © 2011-2022 走看看