订单包含依赖继承的文件

时间:2010-01-22 11:21:26

标签: php arrays include module

嗨,有来自瑞典的人和问候!

我这里有一个非常棘手的问题。我会试着准确地说明我的意思。

我正在构建基于模块的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
                )
        )

我已经对继承进行了爆炸,并将其保存为“依赖”,如上所示。现在的问题是,如何排序包含文件的顺序。每个模块都继承自核心,但如果依赖项数组中有另一个模块,则必须在之后包含“子”模块。

我希望你理解我的意思?

// Tobias

4 个答案:

答案 0 :(得分:1)

查找“拓扑排序”。

答案 1 :(得分:0)

您可以将模块构建为类,然后使用__autoload magic函数自动包含/需要所有需要的php文件。

这样,当你有复杂的依赖关系时,它就不那么令人头痛了。

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

答案 2 :(得分:0)

只需在文件中包含所有依赖项。尝试

// 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'

包括module3还将包括module2,module1和core。你可以省去模块3中的核心和module1,它仍然可以加载它们,但是你必须知道包含哪些内容。

或使用自动加载,不要为此烦恼。

答案 3 :(得分:0)

嗯,我会试着解释一下。

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

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

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