1

我正在编写一个应用程序,其中所有类都使用命名空间,并使用 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)) {
4

2 回答 2

2

在加载之前尝试使用class_exists() 。

于 2013-04-26T14:44:23.860 回答
1

您可以使用spl_autoload_register. 这样你就可以为你自己的类和库编写自动加载器。它们彼此触发并且应该返回true或者false- 如果加载成功与否。

于 2013-04-26T14:59:30.383 回答