2010-07-17 94 views
0

如何使用PHP解析配置值,這是一個數字和其他數字的總和。的這個PHP整數配置(例如,1 = apache,2 = php,3 = apache + php)

一個例子是:

1 - >啓用日誌
2 - >錯誤報告啓用
4 - >電子郵件報告啓用

3 - >登錄+錯誤啓用
5 - >日誌記錄+電子郵件已啓用

+0

問題不清楚給我。這裏以5> 1 + 4爲例。但是5→3 + 2也是可能的。有什麼辦法可以分開組合和單個配置選項/值? – Sadat 2010-07-17 23:58:23

+0

@Sadat:第二行數字是第一行數字的總和,部分是作爲例子。我相信,如何區分價值觀,首先就是他所要求的。 – cHao 2010-07-17 23:59:50

+0

由於@Sadat解釋了什麼,總和將不起作用。 @cHao的答案是要走的路。 – quantumSoup 2010-07-18 00:18:11

回答

3

您不僅擁有一筆總和 - 您自己擁有一組標誌或一個位域,每個標誌由一位表示。

$logging  = !!($cfgval & 1); 
$errorReport = !!($cfgval & 2); 
$emailReport = !!($cfgval & 4); 

「!!」只是確保不爲0的數字(即:具有特定位集的數字)最終與PHP其餘部分使用的「真」值相同,所以像($logging == true)這樣的東西總是按預期工作。這不是必需的,但我強烈建議你以某種方式將值轉換爲布爾值; (bool)也可以工作,即使它是3倍的字符。 :)

只要你保留數字作爲兩個冪(1,2,4,8,16,32 ...),很容易將它擴展到31-32個不同的標誌(整數是32大小的位,但最高位是一個符號位,如果你不知道「2的補數」數學,那麼這樣做的確很有趣)。

+0

你是否認爲,那個會放1024/2048,...,16384等配置鍵/值?這是否方便或可行?我不這麼認爲。 – Sadat 2010-07-18 00:02:21

+0

@Sadat:當然。爲這些值定義常量,並且使用起來非常簡單。對於一個人來說,放入一個配置文件並不是那麼容易,但這是一個體面的安裝/安裝頁面,可以立即啓動。或者你可以使用十六進制數字,其中4位== 1位數,即使對於人類來說它也變得更容易。 – cHao 2010-07-18 00:05:40

+0

爲什麼'!!'比'(布爾)'更好? – 2010-07-18 00:24:25