2014-02-10 36 views
0

我正在爲我的框架開發一個簡單的會話管理器。我試圖爲會話數據設置一個更加用戶友好的結構。從本質上講我的會話存儲這樣的:通過函數參數設置多維數組

$app_name = "Some_App_Name"; 
$component = "notifications"; 
$key = "errors"; 
$value = "There was some error"; 
$_SESSION[$app_name][$component][$key] = $value; 

我面對的是通過會話類中的參數創建這種結構的問題。我有一個理想設置會話值的set方法。上面列出的$ app_name默認通過構造函數添加到會話類中,但我需要找到一種簡單的方法來獲取方法中傳遞的參數,然後創建剩餘的參數。一個簡單的例子:

// Where keys could be: $key1 = notifications, $key2 => "notices" 
public static function set($key1,$key2,$value) { 
    $_SESSION[self::$app_name][$key1][$key2] = $value; 
} 

以上會工作,如果我總是有4個參數,但在某些情況下,我可能只有2個參數。我可以傳遞2個參數(都是一個數組),但我正在尋找更簡化的方法(如果存在這種方法)。

隨着結構的創建和設置值,我還需要驗證,如果值或最後一個鍵存在的一個類似的方式:

// Where keys could be: $key1 = notifications, $key2 => "errors" 
public static function exists($key1,$key2) { 
    if(isset($_SESSION[self::$app_name][$key1][$key2])) { 
    return true; 
} 

任何建議將大大讚賞。

回答

0

在協助想要做similiar,我要強烈建議您不要使用這個概念作爲蝙蝠這聽起來像一個好主意,但你真正的問題自帶的管理一些其他成員的光陣列本身。直與$ _SESSION全局工作真的是基礎上的更強大的選項:

  • 即使與比如說服務器和組件代替參數($ _SESSION [「somename」] [「權威性」]) ,當你想從該對象的另一個實例訪問該級別的內容時會發生什麼?假設我有$ _SESSION ['somename'] ['errors']的另一個會話對象實例,但需要從$ _SESSION ['somename'] ['auth']訪問屬性,但在範圍內,在會話數組中我的基礎不正確。

  • 添加屬性很好$ this-> session-> add(「key」,「name」)但是如果你想追加到該數組(如果name實際上是一個數組而不僅僅是一個值),或者反之亦然。或者如果$ _SESSION ['somename'] ['auth'] ['key'] ['name']實際上具有另一個鍵或值,則檢查發生的事件?

所有和所有有這個在過去幾天的工作,我可以肯定說,這可能不是不可能寫出一個「功能齊全的」會話管理器類,但在這一天結束爲了簡單起見,最好而是直接使用會話數組,因爲它的代碼少,問題少。

0
$params = array(
    "key1" => "value1", 
    "key2" => "value2", 
    "value" => "value" 
); 

public static function set($params = NULL) //default null if no value is passed 
{ 
    if (!self::exists($params)) return false; 

    $_SESSION[self::$app_name][$params["key1"]][$params["key2"]] = $value; 
    return true;   

} 


public static function exists($params = NULL) 
{ 
    if(isset($_SESSION[self::$app_name][$params["key1"]][$params["key2"]])) 
    { 
     return true; 
    } 
    return false; 
} 
+0

問題是,我並不總是知道可能有多少個參數。我想創建函數來利用所有傳遞的參數(可以是1 - 1000哈哈),並創建結構並將最後一個參數作爲值。 – mauzilla