Php 包含文件的顺序取决于继承

Php 包含文件的顺序取决于继承,php,arrays,include,module,Php,Arrays,Include,Module,大家好,来自瑞典的人们和问候 我这里有一个非常棘手的问题。我会尽力准确地表达我的意思 我正在构建一个基于模块的CMS,有些模块继承自父模块。我的问题是,父模块需要包含在“子模块”之前 我从XML文件中获取moduleinfo并将其存储在如下数组中: Array ( [bloggy] => Array ( [module_id] => blog [module_name] => Blog

大家好,来自瑞典的人们和问候

我这里有一个非常棘手的问题。我会尽力准确地表达我的意思

我正在构建一个基于模块的CMS,有些模块继承自父模块。我的问题是,父模块需要包含在“子模块”之前

我从XML文件中获取moduleinfo并将其存储在如下数组中:

Array
(
    [bloggy] => Array
        (
            [module_id] => blog
            [module_name] => Blog
            [module_desc] => Description
            [module_url] => http://www.url.se
            [author] => Dev Name
            [author_url] => http://url.se
            [version] => 1.0
            [inherit] => core|twitter
            [path] => /path/to/file
            [dependon] => Array
                (
                    [0] => core
                    [1] => twitter
                )
        )
我对inherit进行了分解,并将其保存到“dependon”中,如上图所示。现在的问题是,如何对包含文件的顺序进行排序。每个模块都继承自core,但如果depenon数组中有另一个模块,则“子”模块必须包含在后面

我希望你明白我的意思


//Tobias

查找“拓扑排序”。

您可以将模块构建为类,然后使用“自动加载魔法”功能自动包含/需要所有需要的php文件

这样,当您有复杂的依赖关系时,就不会那么头疼了


有关自动加载的详细信息,请参阅PHP手册。

只需在文件中包含所有依赖项即可。试一试

// module1.php
require_once 'core.php'

// module2.php
require_once 'core.php'
require_once 'module1.php'

// module3.php
require_once 'core.php'
require_once 'module1.php'
require_once 'module2.php'
包括模块3还包括模块2、模块1和核心。您可以在模块3中省略核心和模块1,它仍然会加载它们,但是您必须知道哪些包含哪些


或者使用自动加载,不用担心。

嗯,我会尽量解释得更好一点

我在模块文件夹中搜索xml信息文件,并将数据保存到数组中,我还将文件的路径保存到数组中

然后,我使用foreach循环包含并实例化模块。我的问题是父模块必须在“子模块”之前实例化


在添加新模块时,我不想触及核心文件,我需要使用父模块上的挂钩。

所有模块都是类:),我使用自动加载,但不理解您的意思?如果您已经使用自动加载,我看不出您的问题。自动加载应该会根据需要自动解决所有依赖项,而您根本不需要任何包含项。在大多数情况下,包含所有依赖项都是对性能的浪费,因为您会快速建立很长的包含列表,其中许多php文件都没有真正使用过。自动加载解决了这个问题。在这个例子中,你无法从它是否在浪费资源中看出任何东西。另外,我还说过使用自动加载。那么,您基本上是在寻找依赖注入服务容器?在本例中,请参见