通过函数参数设置多维数组

毛拉兹

我正在为我的框架开发一个简单的会话管理器。我试图为会话数据设置一个更加用户友好的结构。本质上,我的会话是这样存储的:

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

我面临的问题是通过会话类中的参数创建此结构。我有一个set方法,理想情况下应该设置一个会话值。上面列出的$ 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;
}

任何建议将不胜感激。

毛拉兹

鉴于要协助其他想要做类似事情的成员,我强烈建议您不要使用此概念,因为这听起来似乎是个好主意,但您真正的问题在于数组本身的管理。直接与$ _SESSION超全局变量一起工作确实是更强大的选择,因为:

  • 即使有了用于服务器和组件的参数($ _SESSION ['somename'] ['auth']),当您想从对象的另一个实例访问该级别的内容时会发生什么?假设我还有一个$ _SESSION ['somename'] ['errors']的会话对象实例,但是需要从$ _SESSION ['somename'] ['auth']访问属性,但是在范围内,我在会话数组中的基数不正确。

  • 添加属性很好$ this-> session-> add(“ key”,“ name”),但是如果您想追加到该数组(名称实际上是一个数组,而不仅仅是一个值),该怎么办,反之亦然。还是检查是否出现$ _SESSION ['somename'] ['auth'] ['key'] ['name']内是否确实存在另一个键或值?

在过去的几天里,所有这些工作我都可以肯定地说,编写“功能齐全的”会话管理器类并非并非不可能,但在一天结束时,为简单起见,最好还是使用该会话直接排列,因为它减少了代码,并且减少了问题。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章