0
我想強制$ _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);
}
如何解決?
謝謝,我們離解決方案有一點距離,但是如何做到「即時」?有時我想運行'$ session-> car-> Fiat_500-> status ='crashed';'這完全是「新」路徑 – Bejkrools
然後,您將不得不創建兩個新對象,以避免此警告。 PHP自己默默地創建對象,但有了這個警告。所以你可以這樣做:'$ session-> car = new stdClass(); $ session-> car-> Fiat = new stdClass(); $ session-> car-> Fiat-> status =「crashed」;' – naklar
我發現我需要嵌套'__set($ name,$ value) {$ this - > $ name = $ this-> arrayToObject ($ value);}'和__get($ name){if(!isset($ this - > {$ name})){$ this - > {$ name} = new stdClass(); } return $ this - > {$ name}; }'到每個stdClass()。 – Bejkrools