我想访问其中一个@_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。 任何帮助表示赞赏!
答案 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
以这种方式访问是特定于实现的。