第三步:Think类的实现之类的自动加载
上回讲到调用Think类中的start函数,这个函数是一个静态函数,因此,不需要初始化便能够被调用。这次,就来分析一下这个start函数有什么功能。
第一行代码是:
spl_autoload_register('Think\Think::autoload');
这行代码的功能是自动加载类功能。传递的是Think名字空间下的Think类中autoload这个函数。
默认呢的自动加载函数是_autoload,这个函数有一个参数,用来接送类名。
我们现在Think中的代码是这样子的:
未来演示自动加载类函数的功能,我们再在index.php中修改成这个样子:
运行下,便会发现,网站输出了abc这三个字,而这三个字,正是我们在index.php中所调用到的类名。因为从运行到现在,还没有加载过一个名为abc的类,因此,当php检测到没有这个类,他就会autoload这个函数。而我们在autoload函数中,所要做的事情,无非就是检测类文件在哪个地方,然后把这个类文件给include或者是require进来。
综合下来,autoload这个函数大体就是这个模样:
因为在这个函数中需要使用到APP_PATH这个常量,本来,应该在我们的ThinkPHP.php这个文件中导如这个常量的,但是为了让用户能够自定义应用目录名,这个就需要用户自己定义了:
当然,为了防止用户忘记输入错误,我们也应该在我们的ThinkPHP中,添加一行代码内容,防止此类问题出现:
现在的ThinkPHP.php变成为: