在php5中的spl_autoload方法相当于实现自己的__autoload
<?<span>php </span><span>function</span> __autoload(<span>$classname</span><span>){ </span><span>if</span>(<span>is_file</span>(<span>$classname</span>.'.php'<span>){ </span><span>include</span> <span>$classname</span>.'.php'<span>; } </span><span>elseif</span>(<span>is_file</span>(<span>$classname</span>.'.inc'<span>){ </span><span>include</span> <span>$classname</span>.'.inc'<span>; } }</span>
它会在注册目录下自动寻找与$classname同名的.php/.inc文件。当然,你也可以指定特定的文件,方法是注册扩展名
<?<span>php spl_autoload_extensions(</span>'.php,.inc,.some');
那么怎样自动加载spl_autoload呢,方法是
<?<span>php spl_autoload_register();</span>
spl_autoload_register有一个$callback参数,如果不指定,它就会自动注册spl_autoload,为了能搜寻更多的自动加载目录,可以在这些代码前面设置自动加载目录
<?<span>php </span><span>set_include_path</span>(<span>get_include_path</span>() . PATH_SEPARATOR . 'some/path' . DIRECTORY_SEPARATOR);
这些方法常用在php框架中。
__autoload 常用在自动加载类库处理
也就是网上说的 这种方法,根据类名,找出类文件,然后require_one
spl_autoload_register()
__autoload的最大缺陷是无法有多个autoload方法
好了, 想下下面的这个情景,你的项目引用了别人的一个项目,你的项目中有一个__autoload,别人的项目也有一个__autoload,这样两个__autoload就冲突了。解决的办法就是修改__autoload成为一个,这无疑是非常繁琐的。
因此我们急需使用一个autoload调用堆栈,这样spl的autoload系列函数就出现了。你可以使用spl_autoload_register注册多个自定义的autoload函数
如果你的PHP版本大于5.1的话,你就可以使用spl_autoload
这是一个PHP 类似自动加载的函数 比如 __autoload 但这个只能传入我们NEW的类名 如果想在NEW的时候调用自己定义的函数就可以用
spl_autoload_register