Итак, я написал серию занятий — хотя эта серия довольно неактуальна и маленькая. «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 в будущем.
Вам также необходимо назначить свойство объекта как ссылку на $TargetArray
аргумент:
public function __construct(&$TargetArray)
{
$this->TargetArray =& $TargetArray;
}
Также учтите, что в PHP> = 5.4.0 уже есть SessionHandler
класс, так что вы получите в итоге:
Неустранимая ошибка: невозможно повторно объявить класс SessionHandler
Других решений пока нет …