在php中使用非命名空间的库

时间:2013-04-26 14:24:52

标签: php oop spl

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

2 个答案:

答案 0 :(得分:2)

在加载前尝试使用class_exists()

答案 1 :(得分:1)

您可以使用spl_autoload_register注册多个自动加载器。这样您就可以为自己的calsses和库编写自动加载器。它们会互相触发,并且应该返回truefalse - 如果加载成功或不成功。