Composer php 如何使用composer定义autoload.php的路径

Composer php 如何使用composer定义autoload.php的路径,composer-php,autoload,Composer Php,Autoload,我有一个composer项目,称之为MyVendor\Database。该项目使用composer和自动加载。该项目中有多个文件具有: require_once __DIR__."/../vendor/autoload.php"; 为了利用自动加载 在我将MyVendor\Database包含在另一个项目中之前,这一切都非常有效 我有另一个项目,叫做MyVendor\CoolPackage,它需要MyVendor\Database 我在CoolPackage上运行composer安装,它将My

我有一个composer项目,称之为
MyVendor\Database
。该项目使用composer和自动加载。该项目中有多个文件具有:

require_once __DIR__."/../vendor/autoload.php";
为了利用自动加载

在我将
MyVendor\Database
包含在另一个项目中之前,这一切都非常有效

我有另一个项目,叫做
MyVendor\CoolPackage
,它需要
MyVendor\Database

我在
CoolPackage
上运行composer安装,它将
MyVendor\Database
下载到vendor文件夹中


然而,这里的问题是,
vendor\MyVendor\Database
中的我的文件失败,因为它们调用
require\u-once\uu DIR\uu./../vendor/autoload.php“
,但是在
composer.json
中定义自动加载方案的
\vendor\MyVendor\Database
中没有vendor文件夹。出于您现在发现的原因,在任何文件中调用Composer autoloading都不是一个好主意,这些文件不仅在该应用程序或模块中,而且在任何其他应用程序中都应该是自动加载的

基本上,任何Composer项目中的文件都应该根据PSR-0或4自动加载的定义进行划分:它们要么只声明类或函数而没有任何副作用(如执行代码),要么执行代码而不定义类或函数。只有前一个文件可以自动加载(函数除外,函数只能通过使用
文件
自动加载部分加载包含它们的文件来声明),后一个文件不应自动加载


然后它应该变得相对容易:当这个组件包含在另一个应用程序中时,可以自动加载的所有类也可以使用。任何非类的东西都不能直接使用。

让人大吃一惊。我试图遵循这些指导原则,但我没有想到在调用当前类时已经调用了autoloader。例如,如果Class1使用Class2,我不需要自动加载器,因为调用Class1的任何类都需要自动加载器。谢谢你简洁的解释。