将命名空间添加到 Composer 中导入的第三方包


Adding namespace to imported third-party package in Composer

我正在使用作曲家将第三方包导入到我的项目中。

包的composer.json使用以下"classmap"自动加载其类:

{
  ...
  "name"=>"vendor/project",
  ...
  "require": {
    "php": ">=5.2.0"
  },
  "type": "library",
  "include-path":["src/"],
  "classmap": [
    "src/path/to/lib1",
    "src/path/to/lib2"
  ]
  ...
}

我的项目composer.json使用 "require" 拉入包。

{
  ...
  "require": {
    "vendor/project": "m.n.*",
  }
  ...
}

我想添加一个命名空间,当我在项目中使用它时,它可以为该包的所有类添加前缀,我可以在作曲家中执行此操作吗?

我知道我可以在我的项目级别使用自动加载,但大概这些类不需要再次加载,我在哪里指向它?

如果不编辑项目中的每个文件并在其顶部添加namespace ..声明,则无法将命名空间添加到项目中。这可能不可行。

如果您将自己的代码命名为命名空间,则应该不存在名称冲突的问题。
如果库与另一个非命名空间的第三方库发生冲突,您也无法将它命名为不可行的命名空间,那么您就有麻烦了。除非是这种情况,否则没有真正的理由担心它。

如果作曲家的定义设置正确,您需要做的就是简单地使用该类:

$foo = new 'VendorClass;

作曲家的自动加载将负责加载类,缺少命名空间无关紧要(见上文)。