用于未知项目级别的 AutoLoader

AutoLoader for unknown project levels

我想让我的项目如此灵活,以至于人们可以简单地将它们复制+粘贴到彼此中。

我的项目结构是 ProjectName/(bin, config, lib)。

复制+粘贴后我会得到一个像 ProjectName1/lib/ProjectName2/lib/ProjectName3/.

这样的链

现在如果自动加载器根据文件被调用的级别搜索文件就更好了。

例如,如果 ProjectName1/lib/ProjectName2/lib/ 中的 class 调用 "new Config",它应该接收位于 ProjectName1/lib/ProjectName2/config/config.php 中的配置文件。

(但不是 ProjectName1/config/config.php 中的那个,也不是 ProjectName1/lib/ProjectName2/lib/ProjectName3/config/config.php 中的那个)。

有办法吗?

编辑: 使文件独一无二有意义吗?例如:如果 'config.php' 是 'ProjectName2Config.php' 则(几乎)没有发生冲突的机会。所以自动加载器可以到处搜索并最终找到它的文件。

编辑: 出于复制和粘贴的原因,每个项目都会有自己的自动加载器。但是我认为我只会为 ProjectName1 加载一个。将它们全部加载以便每个都保持简单是否更好?

干杯, 彼得

PS:我刚结束 3 年的编程休息回来。我也很高兴,如果你告诉我以上通常是个坏主意并告诉我原因:-)

我认为这是一种管理项目的奇怪方式。 Project1 和 Project2 的主脚本在哪里?

例如,我所做的是在我的 index.php 或主 project/lib 包含文件中写入:

<?php define('ROOT_PATH', dirname(__FILE__) . '/'); ?>

我总是使用这个 ROOT_PATH 作为包含路径的开始。

在您的情况下,Project1 ROOT_PATH 类似于“/var/www/Project1/”,Project2 ROOT_PATH 类似于“/var/www/Project1/lib/Project2/”

因此,Project1 和 Project2 中的新配置将使用它们自己的 config.php 文件。