4

以前我只在 Zend Framework 2 中使用了使用命名空间的第三方库。现在我需要使用一个不使用命名空间的库,我似乎无法让它工作。我通过 Composer 安装了它,它安装在vendor目录中。我正在尝试按如下方式使用它:

$obj = new \SEOstats();

结果是一个致命错误,表明无法找到该类。我试图手动配置StandardAutoloader,但到目前为止没有任何运气。我认为通过 Composer 安装时会自动为我完成自动加载,但我想如果没有命名空间就不是这样吗?我没有在 Composer 生成的自动加载文件中看到对库的任何引用。我想我必须手动完成 - 但是怎么做?

提前致谢。

4

1 回答 1

8

您可以使用文件类映射键。

作为一个例子,考虑这个 composer.json:

{
    "require": {
        "vendor-example/non-psr0-libraries": "dev-master",
    },
    "autoload":{
        "files": ["vendor/vendor-example/non-psr0-libraries/Library01.php"]
    }
}

使用 files 键,您可以使用

$lib = new \Library01();

当您需要加载多个包含类的文件时,请使用 classmap 键。composer.json 将是:

{
    "require": {
        "vendor-example/non-psr0-libraries": "dev-master",
    },
    "autoload":{
        "classmap": ["vendor/vendor-example/non-psr0-libraries/"]
    }
}

Composer 将扫描指定目录中的.php.inc文件,为每个文件/类配置自动加载器。

有关更多信息,您可以查看http://getcomposer.org/doc/04-schema.md#fileshttp://getcomposer.org/doc/04-schema.md#classmap

如果在创建对象时在一个命名空间下,则必须使用“\”(根命名空间),否则将使用当前命名空间下的 Library01 类(如果有,如果没有,则得到一个错误)。

于 2013-05-05T14:50:29.140 回答