我有一个简单的会话类(下面):
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');
或者最好坚持我目前正在做的事情。
由于
答案 0 :(得分: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 :(得分: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;
}
}
答案 2 :(得分:0)
小心点。这可能让我们中的一些人感到困惑,因为在某些框架中,getter中的第二个参数意味着默认值:
Session::get('key', 'defaultValue');
如果密钥不存在,将返回 defaultValue
。
可能不是最好的解决方案,但您可以将set
的所有内容转换为特殊类(可能称为KeyValue
或其他),当您使用get时,您可以返回值密钥 OR 另一个KeyValue
对象,执行次数为get()
,再次执行相同操作,返回值 OR 另一个KeyValue
。这样,您就可以以相当酷的方式链接方法:
Session::get('beth')->get('age')
答案 3 :(得分: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;
}
答案 4 :(得分: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];
}