php入门--自动加载函数

之所以要使用自动加载函数,是因为当有外部类需要依赖时如果不使用自动加载函数就只能使用require XXX.php这样引入一个文件的依赖,但是这样做的问题在于如果需要大量的类的引入,就需要写数个这样的文件,并且如果有相关的类被删除了,require关键字会造成错误。

function __autoload($class){
    require __DIR__.'/'.$class.'.php';
}

但是事实上这样的方式(autoload并不常用):
在php5.3以前自动加载函数是使用__autoload()来实现的,但随着各种框架的引入和业务逻辑的逐渐复杂,这个函数的一个问题显现出来,就是当不同框架引入了多个__autoload()函数时,就会报出函数重复定义的致命错误。
而这个问题在php5.3被解决,使用spl_autoload_register关键字来取代autoload()函数,这样做可以定义多个自动加载函数。这样每个类就可以分别执行自己的载入函数。

另外一个重点就是spl_autoload_register的执行顺序,当有多个spl_autoload_register需要执行时,例如上面例子,执行的结果就是:

php入门--自动加载函数_第1张图片
按代码顺序的执行结果

而如果将 spl_autoload_register的顺序换成 spl_autoload_register('autoload1');
在最前面则执行结果会变成:

php入门--自动加载函数_第2张图片
spl_autoload_register('autoload1')放在最前面的执行结果

之所以会出现这样的不同是和多个spl_autoload_register的使用顺序有关: 执行顺序是按照注册的顺序,一个一个往下找,如果找到了就停止。即在本例中找test1这个类,找到就停止。同时可以使用 var_dump(spl_autoload_functions());来打印出自动加载的顺序

array(3) {
  [0]=>
  string(9) "autoload1"
  [1]=>
  string(9) "autoload3"
  [2]=>
  string(9) "autoload2"
}

你可能感兴趣的:(php入门--自动加载函数)