为什么我的这个类的最终输出(会话包装器)会变成一个空数组?

时间:2014-12-16 16:35:01

标签: php arrays class reference wrapper

所以我写了一系列课程 - 虽然这个系列是相当无关紧要的,而且很小。 ' SessionHandler'我正在使用的扩展了一个' ArrayClass'这就是 - 一个从提供的数组中获取或设置的类。

这是ArrayClass代码:

class ArrayClass
{
    protected $TargetArray = null;

    public function __construct(&$TargetArray)
    {
        $this->TargetArray = $TargetArray;
    }

    public function __set($Key,$Value)
    {
        echo("Attempting to set value for key '$Key'...<br/>");

        if( !isset($this->TargetArray))
        {
            echo("TargetArray is not set. Creating and re-setting.<br/>");
            $this->TargetArray = array();
            return $this->__set($Key,$Value);
        }
        else
        {
            echo("Setting $Key to $Value...<br/>");
            $this->TargetArray[$Key] = $Value;
            echo("Value in TargetArray at key '$Key' set to " . $this->$Key . "<br/>");
            return $Value;
        }
    }

    public function __get($Key)
    {               
        echo("Attempting to retrieve a value for key '$Key'...<br/>");

        if( !isset($this->TargetArray))
            return null;
        else
            return $this->TargetArray[$Key];
    }

    public function __toString()
    {
        return var_export($this->TargetArray,true);
    }
}

这是继承自此的类(可能是简短的):

class SessionHandler extends ArrayClass
{
    public function __construct()
    {
        session_start();

        parent::__construct($_SESSION);
    }

    public function End()
    {
        session_destroy();
    }   
}

这是我对上述所有内容的使用:

$Session = new SessionHandler();
$Session->DebuggingKey = "12345";
echo($Session);

我的最终输出:

Attempting to set value for key 'DebuggingKey'...
Setting DebuggingKey to 12345...
Attempting to retrieve a value for key 'DebuggingKey'...
Value in TargetArray at key 'DebuggingKey' set to 12345
array ( )

该值在数组中设置。可以从数组中检索该值。但是当我尝试回显数组的内容时,我只返回一个数组 - 看似空洞。

类似地;我在我的调试器中检查上述DebuggingKey的另一个检查,我注意到会话密钥尚未设置:

public function IsActive()
{
    if( isset($_GET['debugging']) && $_GET['debugging'] != true )
        return false;
    else if( !isset($_SESSION['DebuggingKey']))
        return false;
    else
        return true;
}

此函数返回false。

有什么想法?我讨厌在这上面旋转我的轮子,因为它主要是为了减轻一些重复大约一百万次的角色,当我建立起我能力的东西时;所以它并不是完全必要的 - 我只是希望看到它的工作......我希望将来包装GET,POST和COOKIE变量。

1 个答案:

答案 0 :(得分:2)

您还需要将object属性指定为$TargetArray参数的引用:

public function __construct(&$TargetArray)
{
    $this->TargetArray =& $TargetArray;
}

此外,请注意,在PHP&gt; = 5.4.0中,已经有SessionHandler个类,因此您最终会:

  

致命错误:无法重新声明类SessionHandler