2014-02-10 3 views
0

Я работаю над простым диспетчером сеансов для своей структуры. Я пытаюсь настроить более удобную для пользователя структуру данных сеанса. По существу моих сессий сохраняются так:Установите многомерный массив через функциональные параметры

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

Проблемы я столкнулся создаю эту структуру через параметры в классе сессии. У меня есть метод набора, который должен идеально устанавливать значение сеанса. $ 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

В свете оказания помощи другим членам, желающим сделать что-то похож, я хочу настоятельно советую вам с помощью этой концепции, как у летучих мышей, это звучит как хорошая идея, но ваша истинная проблема приходит с управлением из массив. Работая непосредственно с $ _SESSION суперглобальным действительно является более мощным вариантом на том основании, что:

  • Даже с параметром в месте для скажем сервера и компоненты ($ _SESSION [ «SomeName»] [ «Auth»]) , что происходит, когда вы хотите получить доступ к содержимому с этого уровня из другого экземпляра объекта? Скажем, у меня есть другой экземпляр объекта сеанса для $ _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

Смежные вопросы