我正在编写一个应用程序,其中所有类都使用名称空间,并使用spl_autoload_register()动态加载所有类。
现在我想使用非命名空间库(WideImage)。由于WideImage不使用名称空间,因此spl_autoload_register()不起作用。所以手动包含脚本:
require( 'Library/WideImage/WideImage.php');
$w = new WideImage();
但它仍然试图自动加载;并给出了一个致命的类未找到错误。
如何覆盖此自动加载功能?
按要求:
spl_autoload_register(function( $class ) {
$path = $_SERVER['DOCUMENT_ROOT'] . DIRECTORY_SEPARATOR . CMS_PATH . DIRECTORY_SEPARATOR;
$classFile = str_replace( '\\', DIRECTORY_SEPARATOR, $class );
$classPI = pathinfo( $classFile );
$classPath = $path . $classPI[ 'dirname' ] ;
$file = $classPath . DIRECTORY_SEPARATOR . $classPI[ 'filename' ] . '.class.php';
if (file_exists($file)) {
require_once( $file );
}
});
编辑:解决方案:
更改
if (file_exists($file)
to
if (file_exists($file) && !class_exists($class)) {
答案 0 :(得分:2)
在加载前尝试使用class_exists()。
答案 1 :(得分:1)
您可以使用spl_autoload_register
注册多个自动加载器。这样您就可以为自己的calsses和库编写自动加载器。它们会互相触发,并且应该返回true
或false
- 如果加载成功或不成功。