在会话对象PHP中检索数组中的变量

时间:2017-05-16 17:21:22

标签: php session

我想访问其中一个@_SESSION对象,检索受保护的数组并访问数组信息。

继承人的对象:

object(Zend\Stdlib\ArrayObject)[271]
 protected 'storage' => 
      array (size=1)
          'session' => string 'example@hotmail.com 0' (length=18)
 protected 'flag' => int 2
 protected 'iteratorClass' => string 'ArrayIterator' (length=13)
 protected 'protectedProperties' => 
     array (size=4)
        0 => string 'storage' (length=7)
        1 => string 'flag' (length=4)
        2 => string 'iteratorClass' (length=13)
        3 => string 'protectedProperties' (length=19)

我能够像这样访问会话对象:

$_SESSION['Zend_Auth']

但是当我试图检索这样的信息时:

$_SESSION['Zend_Auth']->storage['session']

返回null。 任何帮助表示赞赏!

1 个答案:

答案 0 :(得分:1)

要访问受保护的成员,您需要从同一类型(子类型)中访问它,请参阅visibility (PHP Docs)

class SessionReader extends \Zend\Stdlib\ArrayObject
{
    /**
     * @return array
     */
    public function access(\Zend\Stdlib\ArrayObject $auth) {
        return $auth->storage;
    }
}

$reader = new SessionReader();
$storage = $reader->access($_SESSION['Zend_Auth']);
$session = $storage['session'];

这是一个通用示例,它适用于每个受保护的成员。

在您的情况下, Zend\Stdlib\ArrayObject 可能还有其他方法可以在that case中访问该成员(或该成员内的数据):

$session = $_SESSION['Zend_Auth']->getArrayCopy()['session'];

// or

$session = $_SESSION['Zend_Auth']['session']; // via ArrayAccess

以这种方式访问​​是特定于实现的。