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');

次に、ベスの詳細を取得したい場合は、セッション値を変数に割り当ててから、次のように内部の詳細にアクセスできます。

   $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 の 2 番目のパラメーターがデフォルト値を意味するため、一部の人にとっては混乱を招く可能性があります。

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

defaultValueキーが存在しない場合に返されます。

おそらく最良の解決策ではありませんが、すべてをset特別なクラス (おそらく呼び出されたものなど) に変換できます。get を使用すると、キーの値または別のオブジェクトのいずれかを返すことKeyValueができます。もう一度、値または別の値を返します。そうすれば、かなりクールな方法で chain を呼び出すことができます。KeyValueget()KeyValue

Session::get('beth')->get('age')
于 2013-03-01T14:32:23.033 に答える
0

SESSION のすべてのデータを表示するためのコア PHP またはその他の PHP のフレームワーク

   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 に答える
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 に答える