2013-03-01 70 views
1

我有(下圖)一個simplet會話類:PHP Session類返回值

class Session{ 

    public static function init(){ 
      @session_start(); 
     } 

    public static function set($key, $value){ 
      $_SESSION[$key] = $value; 
    } 

    public static function get($key){ 
     if (isset($_SESSION[$key])) { 
     return $_SESSION[$key]; 
     } else if(empty($key)){ 
     return $_SESSION; 
     } 

    } 

    public static function destroy(){ 
     session_destroy(); 
    } 

} 

,將I設爲使用

Session::set(Name, value); 

要設置一個多會話值的單個會話值i使用

Session::set(Name, array(name, value....)); 

然後,要簡單地檢索我需要我使用的會話:

Session::get(Name); 

現在我的問題是,當我可以設置多維值,我實際上不能讓他們與上面的當前獲取函數。那麼,如何重新構造我的get($鍵),因此它不僅會返回一個請求,而且任何要求

Session::set('joe', 'bloggs'); 
    Session::set('beth', array('age'=>'21','height'=>'5.5ft')); 

因此,舉例來說,我再次得到一個單一會話值,如喬:

Session::get('joe'); 

然後,如果我想獲得Beth的細節,我可以在會話值分配給一個變種,然後訪問內部細節,像這樣:

$age = Session::get('beth'); 
    $age['age'] 

但它有可能重建我的get方法,所以我可以做:

Session::get('beth','age'); 

還是最好堅持我現在正在做的事情。

感謝

回答

2

您可以更新您get方法是:

public static function get($key, $item = NULL){ 
    if (isset($_SESSION[$key])) { 
     if(isset($item) && isset($_SESSION[$key][$item])) { 
      return $_SESSION[$key][$item]; 
     } 

     return $_SESSION[$key]; 
    } 

    return NULL; //not found 
} 

然後你可以使用它像:

Session::get('joe'); // returns array 
Session::get('joe', 'age'); // returns joe's age 
+1

感謝使用'$ _SESSION'陣列和覆蓋它與所述第一的答覆 – 2013-03-01 23:04:21

0

要小心。這可能會產生混淆某些人來說,在一些框架,在吸氣的第二個參數是指默認值:如果鍵不存在

Session::get('key', 'defaultValue'); 

defaultValue將返回。

可能不是最好的解決辦法,但你可以轉換一切你set到一類特殊的(也許叫KeyValue或其他),當你用得到的,你可能會返回鍵OR另一個KeyValue對象的任何值,執行get(),再次做同樣的處理,返回值另一個KeyValue。這樣,您就能夠方法鏈在一個相當酷的方式:

Session::get('beth')->get('age') 
1

以下是你需要什麼

Session::set('joe', 'bloggs'); 
Session::set('beth', array('age' => '21','height' => '5.5ft','ball' => array("A" => "blue","B" => "Green"))); 

var_dump(Session::get("beth", "age")); // returns 21 
var_dump(Session::get("beth", "ball", "A")); // returns blue 

您的類修改

class Session { 

    private static function init() { 
     if (session_status() != PHP_SESSION_ACTIVE) 
      session_start(); 
    } 

    public static function set($key, $value) { 
     self::init(); 
     $_SESSION[$key] = $value; 
    } 

    public static function get() { 
     self::init(); 
     $args = func_get_args(); // Get all arguments 
     $items = $_SESSION; // create a tempoary version of $_SESSION aarray 
     foreach ($args as $ndx) { 
      // Take Item and override with Subitem 
      $items = isset($items[$ndx]) ? $items[$ndx] : null; 
     } 
     return $items; 
    } 
} 
+1

尼斯方式以外的任何構架中發現匹配,然後再與下一個arg匹配。但是,您應該添加一些註釋以使代碼對於非PHP專家清晰易讀。 – 2013-03-01 14:51:26

+0

從來不知道這是不明確的...更新了簡單的評論 – Baba 2013-03-01 14:55:11

+0

所以@Sven當你提到這是一個很好的方式,這將是一個更好的方法比一個demo'd?這對於同樣的效果有點大,但它們是相同的還是更好的 – 2013-03-01 23:04:02

0

功能像這樣可以使用無限數量的鍵:

public static function get() 
{ 
    $array = $_SESSION; 
    $keys = func_get_args(); 
    foreach($keys as $key) 
    { 
     if(isset($array[$key])) 
      $array = $array[$key]; 
     else 
      return FALSE; // or it could return array() 
    } 

    return $array; 
} 
0

在覈心PHP或PHP的用於示出的所有數據中SESSION

print_r($_SESSION); 
    public function setSessionValue($session_name, $session_value){ 
     $_SESSION[$session_name] = $session_value; 
    } 

    public function getSessionValue($session_name){ 
     return $_SESSION[$session_name]; 
    }