如何在php中创建依赖关系结构


How do you create a dependency structure in php?

我有很多状态,我正在为每个状态构建函数。我正试图弄清楚如何根据状态恢复更改。更清楚一点:假设您有5种状态:启动已安装PROC完成上传

为了从状态COMPLETE变为UPLOADED,我必须运行PROC状态和INSTALLED。我正在尝试构建一个简单的系统,在这个系统中我可以调用一个函数,它会知道哪些函数需要运行,这取决于它们在数组中定义的依赖关系。

假设:每个状态只能向后恢复。因此,如果在上面的例子中,UPLOADED不能进入COMPLETE状态。每个状态都可以恢复为其自身(状态UPLOADED和恢复为UPLOADED)。

有人知道我该怎么做吗?当然会有更多的状态,我只是想避免50 if语句:/

使用您可能的状态路径创建一个DAG(有向无循环图)。然后,您可以使用提供的起点遍历图,并根据所访问节点的值调用函数。

因此,如果您的节点具有值complete,我假设您想要调用complete(...)函数。所以你可以这样做:

call_user_func($nodeValue, ...);

我会把它包装成一个简单的旧整数。这样想:

class Foo {
    const START     = 1; // 2^0
    const INSTALLED = 2; // 2^1
    const PROC      = 4; // 2^2
    const COMPLETE  = 8; // 2^3
    const UPLOADED  = 16;// 2^4
    // all powers of 2
}

如果你在数据库中支持你的任务,它也会非常优雅,一个整数可以包含整个状态。您还可以使用位掩码非常容易地快速查询具有给定状态的所有作业。

我离题了。如果你想到一份进入PROC的工作,它会是这样的:

00111

(实际上是一个7)

所以,向前和向后移动工作岗位,只是检查下一点的问题。。。有很多方法可以剥那只猫的皮。然后,你得到的是一种将函数与位相关联的简单方法,一种存储状态的紧凑方法,以及帮助你评估所需步骤的大量数学计算。