2013-07-11 98 views
0

我有很多的地位和我建立功能每種狀態。我試圖弄清楚如何根據狀態恢復更改。該更清楚一點: 說你有5種狀態: START INSTALLED PROC COMPLETE UPLOADED如何在php中創建依賴關係結構?

爲了從狀態COMPLETE已上傳,我將不得不運行PROC狀態,並安裝去。我試圖建立一個簡單的系統,我可以調用一個函數,它會知道哪些函數運行取決於它們的依賴關係定義在一個數組或其他東西。

假設: 每個狀態可以僅向後恢復。所以如果在上面的例子中,UPLOADED不能進入完成狀態。 每個狀態可以恢復到自身(狀態上傳並恢復到上載)。

任何人都知道我怎麼能去呢?當然會有很多人多了很多狀況,我只是想避免50 if語句:/

+0

SPLLinkedList可以輕鬆選擇,讓下一個或上一個列表中 –

+0

@MarkBaker您可以詳細些嗎?以前從未使用過SPL。 – user962449

回答

0

與可能的狀態路徑,創建DAG(向無環圖)。然後,您可以使用提供的起點遍歷圖形,並根據您訪問的節點的值調用函數。

因此,如果您的節點的值爲complete,我假設您要調用complete(...)函數。所以你可以這樣做:

call_user_func($nodeValue, ...); 
0

我會把它換成一個簡單的舊整數。想想這樣說:

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)

所以推進就業和回滾,僅僅是一個問題檢查下一點...皮膚貓的方式噸。你得到的是一種將函數與位關聯的簡單方法,一種緊湊的存儲狀態方法和大量的數學運算來幫助你評估所需的步驟。

+0

我不明白這個解決方案。 – user962449

+0

如果你有興趣,我可以嘗試闡述! :) – Saeven

+0

是的,我感興趣:) – user962449