php中__autoload和spl_autoload_register的区别

240 阅读2分钟

这里我们讨论下php中__autoload和spl_autoload_register的区别, 当然并不是很完善, 毕竟比较复杂, 但是能用就行.

__autoload作用

在php的早期是没有spl_autoload_register函数的, 只有__autoload函数, 作用是自动加载类库.

当我们php文件中要引入其他类库时, 往往需要使用require_once来手动加载, 但当类库很多, 这样就显得繁琐, 往往一个文件要使用十几个require_once, 为了避免这种情况我们可以使用__autoload函数, 来实现自动加载.

__autoload应用举例

  1. 实现__autoload函数, 当php加载某个没注册的类时, 会自动调用, 并默认传入类的全路径的namespace加类名, 我们可以通过解析namespace和类名找到文件位置
function __autoload($namespaceWithClassName){
  //伪代码解析得到文件位置
  $filePath = parse($namespaceWithClassName);
  //加载
  if(is_file($filePath)){
    require_once($filePath);
  }
}


  1. 下面有两个文件, 文件一实现了一个类, 文件二调用了该类, 由于我们实现了__autoload函数, 所以在文件二中不需要用require引入文件一, php会自动调用__autoload函数执行, 自动加载文件一, 这样就能使我们代码非常简洁
<?php
//文件一
class A{

}