我想使用自定义会话处理程序强制$ _SESSION表现得像对象一样。代码如下,
$_SESSION = [
'user' => [
'id' => '7',
'name' => 'James',
'lastname' => 'Bond',
'login' => '007',
'pass' => 'qwe7fyqw9mhev8qhr',
],
'kill' => [
'Mr_Muscle' => [
'status' => 'alive',
],
'Joe_Black' => [
'status' => 'dead',
]
],
];
$session = new Session();
echo $session->user->name;
$session->kill->Mr_muscle->status = 'dead';
$session->save();
我几乎做到了,但我收到了警告:
警告:在第80行的/var/www/project/mvc/bootstrap.php中从空值创建默认对象
当我尝试创建新值时,在这种情况下:
$session->kill->Dr_Quinn->status = 'dead';
将创建值,但我不想隐藏此警告,我想废除它。
class Session
{
public function __construct()
{
foreach ($_SESSION as $key => $value)
{
$this->{$key} = $value;
}
}
public function __set($name, $value)
{
$this->$name = $this->arrayToObject($value);
}
private function arrayToObject($array) {
if (!is_array($array)) {
return $array;
}
$object = new stdClass();
if (is_array($array) && count($array) > 0) {
foreach ($array as $name=>$value) {
$name = strtolower(trim($name));
if (!empty($name)) {
$object->$name = $this->arrayToObject($value);
}
}
return $object;
}
else {
return FALSE;
}
}
public function save()
{
$_SESSION = json_decode(json_encode(get_object_vars($this)), true);
}
如何解决?
答案 0 :(得分:1)
只做
if (!isset($session->kill->Mr_muscle))
$session->kill->Mr_muscle = new stdClass();
$session->kill->Mr_muscle->status = 'dead';
避免这种警告。