嗨,有来自瑞典的人和问候!
我这里有一个非常棘手的问题。我会试着准确地说明我的意思。
我正在构建基于模块的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
答案 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循环来包含和实例化模块。我的问题是必须在“子”之前实例化父模块。
我不想在添加新模块时触摸核心文件,我需要使用父模块上的钩子。