1

我有一个简单的会话类(下):

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();
    }

 }

要设置单个会话值,我使用

  Session::set(Name, value);

要设置多个会话值,我使用

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

然后简单地检索我需要我使用的会话:

  Session::get(Name);

现在我的问题是,当我可以设置多维值时,我实际上无法使用上面的当前 get 函数获取它们。那么我如何重新构建我的 get($key) 以便它不仅返回单个请求而且返回任何请求

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

因此,例如,我再次得到一个会话值 EG Joe:

    Session::get('joe');

然后,如果我想获取 beth 的详细信息,我可以将会话值分配给 var,然后访问内部详细信息,如下所示:

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

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

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

还是最好坚持我目前正在做的事情。

谢谢

4

5 回答 5

3

您可以将您的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
于 2013-03-01T14:32:08.513 回答
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;
    }
}
于 2013-03-01T14:39:10.047 回答
0

当心。这可能会让我们中的一些人感到困惑,因为在某些框架中,getter 中的第二个参数表示默认值

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

defaultValue如果 key 不存在,将返回。

可能不是最好的解决方案,但是您可以将所有内容转换set为一个特殊的类(可能被称为KeyValue或其他),并且当您使用 get 时,您可以返回键的值另一个KeyValue对象,执行get()相同的操作再次返回值OR another KeyValue。这样,您将能够以一种相当酷的方式对链进行方法:

Session::get('beth')->get('age')
于 2013-03-01T14:32:23.033 回答
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;
}
于 2013-03-01T14:43:03.740 回答
0

在 Core 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];
   }
于 2015-11-24T06:48:34.553 回答