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

Php 为什么这个类的最终输出(会话包装器)会出现一个空数组?,php,arrays,class,reference,wrapper,Php,Arrays,Class,Reference,Wrapper,所以我写了一系列的类——尽管这个系列很不相关,而且很小。我使用的“SessionHandler”扩展了一个“ArrayClass”,即从提供的数组获取或设置的类 以下是ArrayClass代码: class ArrayClass { protected $TargetArray = null; public function __construct(&$TargetArray) { $this->TargetArray = $TargetA

所以我写了一系列的类——尽管这个系列很不相关,而且很小。我使用的“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);
    }
}
以下是我对以上所有内容的使用:

$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变量

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

public function __construct(&$TargetArray)
{
    $this->TargetArray =& $TargetArray;
}
另外,请注意,在PHP>=5.4.0中已经有一个
SessionHandler
类,因此您将得到:

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


幸运的是,我认为我使用的是PHP5.3,表现得很愚蠢!我会考虑的。有“课时”课程吗?(我只是看看…)你完全搞定了-谢谢。我不经常在PHP中传递引用——尽管我意识到我应该更频繁地传递引用。
public function __construct(&$TargetArray)
{
    $this->TargetArray =& $TargetArray;
}