Php 未知项目级别的自动加载程序

Php 未知项目级别的自动加载程序,php,autoloader,Php,Autoloader,我想让我的项目变得如此灵活,人们可以简单地将它们复制并粘贴到彼此中 我的项目结构是ProjectName/(bin,config,lib) 复制+粘贴之后,我会有一个类似于ProjectName1/lib/ProjectName2/lib/ProjectName3/的链 现在,如果自动加载程序根据调用文件的级别搜索文件,那就太好了 例如,如果ProjectName1/lib/ProjectName2/lib/中的一个类调用“new Config”,它应该会收到ProjectName1/lib/P

我想让我的项目变得如此灵活,人们可以简单地将它们复制并粘贴到彼此中

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

复制+粘贴之后,我会有一个类似于ProjectName1/lib/ProjectName2/lib/ProjectName3/的链

现在,如果自动加载程序根据调用文件的级别搜索文件,那就太好了

例如,如果ProjectName1/lib/ProjectName2/lib/中的一个类调用“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的一个。是否最好将它们全部加载以便每个都保持简单

干杯, 彼得


附言:我刚从3年的编程休息中回来。我也很高兴,如果你告诉我上面的想法通常是个坏主意,并告诉我原因:-)

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

例如,我要做的是在index.php或主项目/lib include文件中编写:

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

我总是用这个根路径作为包含路径的开始

在您的例子中,Project1根路径类似于“/var/www/Project1/”,Project2根路径类似于“/var/www/Project1/lib/Project2/”


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

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

例如,我要做的是在index.php或主项目/lib include文件中编写:

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

我总是用这个根路径作为包含路径的开始

在您的例子中,Project1根路径类似于“/var/www/Project1/”,Project2根路径类似于“/var/www/Project1/lib/Project2/”


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

只需编写一个php函数,并将其注册为autoloader即可。缺点可能是编码工具很难找到正确的类,如果结构变得足够混乱,您也可能很难找到正确的类。()只需编写一个php函数,并将其注册为autoloader即可,只需使用它即可。缺点可能是编码工具很难找到正确的类,如果结构变得足够混乱,您也可能很难找到正确的类。谢谢你。这听起来不错,只要我不后退。但是说我有:项目1开始$project2=新的project2$someValue=$project2->getSomeThing();项目1继续。。。。Project1()中的新内容;在这种情况下,根路径将取自Project2,对吗?回答您的问题:我打算使用Project2,就像另一个编辑中的示例:如果我正在处理Project1,并且可能需要Project2中的某些内容,我更愿意包含整个项目,而不是只复制我需要的部分。我希望这更易于管理,即当Project2最终更新时。也许我更应该用“包”而不是“项目”。在“包”或“模块”的情况下,我理解。然后,我会有一个项目及其库、模块/包(和其他东西)。每个模块/包都会有自己的配置、视图、控制器、SQL或其他独立的组件。谢谢。这听起来不错,只要我不后退。但是说我有:项目1开始$project2=新的project2$someValue=$project2->getSomeThing();项目1继续。。。。Project1()中的新内容;在这种情况下,根路径将取自Project2,对吗?回答您的问题:我打算使用Project2,就像另一个编辑中的示例:如果我正在处理Project1,并且可能需要Project2中的某些内容,我更愿意包含整个项目,而不是只复制我需要的部分。我希望这更易于管理,即当Project2最终更新时。也许我更应该用“包”而不是“项目”。在“包”或“模块”的情况下,我理解。然后,我会有一个项目及其库、模块/包(和其他东西)。每个模块/包都有自己的配置、视图、控制器、SQL或其他任何东西,并且是独立的。