Почему мой конечный вывод этого класса (обертка сеанса) выдает пустой массив?

Итак, я написал серию занятий — хотя эта серия довольно неактуальна и маленькая. «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

Решение

Вам также необходимо назначить свойство объекта как ссылку на $TargetArray аргумент:

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

Также учтите, что в PHP> = 5.4.0 уже есть SessionHandler класс, так что вы получите в итоге:

Неустранимая ошибка: невозможно повторно объявить класс SessionHandler

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]