【问题标题】:Autoloading PHP file in composer package在 Composer 包中自动加载 PHP 文件
【发布时间】:2017-04-24 12:55:20
【问题描述】:

我正在尝试创建一个 composer 包,其中还包含 src/functions.php 和一些通用功能。我在 composer.json 中有以下内容使其自动加载:

"autoload": {
    "files": ["src/functions.php"]
}

当我将此包导入项目时,它会尝试在当前项目(本地)中加载 src/functions.php,而不是导入的包。有没有办法确保在导入时加载正确的文件(./vendor/bla/src/functions.php)?

【问题讨论】:

  • 我建议不要在作曲​​家包中使用全局的、非命名空间的函数——特别是如果它是供其他人使用的!至少让它们成为帮助类的静态方法。

标签: php composer-php autoload


【解决方案1】:

自动加载并不是为了加载所有内容。如果src/functions.php 包含类,只需确保它的命名空间正确,我看不出自动加载器为什么会选择你的本地类而不是包的类。如果您对项目中的包和代码使用相同的命名空间,那么基本上您应该停止这样做。

如果src/functions.php 只是一堆函数,那么我强烈建议重构代码并将它们包装在适当命名空间的类中。您可以将您的函数设为static methods,因此从使用角度来看基本上不会有太大变化。

编辑

完成重构后,将您的 composer.json 从问题中显示的内容更改为:

"autoload": {
    "classmap": ["src/"]
}

【讨论】:

  • 谢谢,它是命名空间! :)
猜你喜欢
  • 1970-01-01
  • 2013-02-17
  • 2021-03-18
  • 2018-11-26
  • 2013-06-16
  • 2013-04-22
  • 2016-06-10
  • 2018-07-11
相关资源
最近更新 更多