为了账号安全,请及时绑定邮箱和手机立即绑定

自动加载那个判断是否已经加载是不是不必要的?

自动加载那个判断是否已经加载是不是不必要的,因为如果已经加载过是不会触发load方法的吧?

正在回答

2 回答

主要是为了防止,跨方法和夸类的情况下发生重复引入的情况,毕竟作用域不一样。比如 indexCtrl中的index方法使用了 new /model,在baseCtrl中再使用new /model是会重新出发load方法的。



0 回复 有任何疑惑可以回复我~
#1

茫海 提问者

首先load方法是使用spl_autoload_register注册,它会在当找不到一个类的时候自动触发,反过来说如果触发了load方法,说明这个类是没有include进来的,所以我还是觉得判断是多余的。
2016-08-25 回复 有任何疑惑可以回复我~
#2

李虎头 回复 茫海 提问者

比如下面这种情况,就会两次引入同一个类。这个在引入model类的时候,经常会发生 public function index() { new class(); $this->t(); } public function t() { new class(); }
2016-08-25 回复 有任何疑惑可以回复我~
#3

茫海 提问者 回复 李虎头

由于回复有字数限制,我贴到下面的回答里了,你看下
2016-08-26 回复 有任何疑惑可以回复我~
#4

李虎头 回复 茫海 提问者

同学,经过我多次测试和查阅文档,你是对的!不过很遗憾没有办法更新视频课程,不过我会把我的框架关于自动加载的部分优化一下
2016-08-29 回复 有任何疑惑可以回复我~
查看1条回复
/**关于那个autoload的问题,由于回复那里有字数限制,我就另外开一个问题来回复您了*/
<?php
/**
* index.php
*/
spl_autoload_register("load");

$test = new Test();//第一次使用Test类,输出:“开始load:Test....”
Third::test();//第二次,在另外一个类的方法里面使用Test类,并不会输出“开始load:Test....”
test();//第三次在函数中使用Test,并不会输出“开始load:Test....”

function load($class)
{
    echo "开始load:".$class."....<br/>";
    require $class.".php";
}

function test()
{
    new Test();
}
<?php
/**
* Test.php
*/
class Test
{
    
}
<?php
/**
* Third.p
*/

class Third
{
    public static function test()
    {
        $test = new Test();
    }
}

执行结果如下图所示:

http://img1.sycdn.imooc.com//57bfa8420001ff9b03030175.jpg

最终只输出了一次load:Test,也就是说只有在第一次使用Test的时候才会自动调用load方法,后面再次使用Test并不会执行load了

3 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

自动加载那个判断是否已经加载是不是不必要的?

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信