所以我写了一系列类 - 尽管这个系列相当无关紧要,而且很小。我正在使用的"会话处理程序"扩展了一个"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 ( )
该值在数组中设置。可以从数组中检索该值。但是当我尝试回显数组的内容时,我只返回一个数组 - 看似空。
同样,我在调试器中对上述调试密钥进行了另一次检查,我注意到尚未设置会话密钥:
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
类,因此您最终会得到:
致命错误:无法重新声明类会话处理程序