В принципе, я хочу создать класс Variables, который использует сеансы для хранения всего в нем, что позволяет мне быстро получать и хранить данные, которые должны использоваться на всем сайте, без непосредственной работы с сеансами.Как заставить PHP __set работать как естественная переменная?
Прямо сейчас, мой код выглядит следующим образом:
<?php
class Variables
{
public function __construct()
{
if(session_id() === "")
{
session_start();
}
}
public function __set($name,$value)
{
$_SESSION["Variables"][$name] = $value;
}
public function __get($name)
{
return $_SESSION["Variables"][$name];
}
public function __isset($name)
{
return isset($_SESSION["Variables"][$name]);
}
}
Однако, когда я пытаюсь использовать его как естественный переменной, например ...
$tpl = new Variables;
$tpl->test[2] = Moo;
echo($tpl->test[2]);
Я в конечном итоге получить " o "вместо" Moo ", поскольку он устанавливает тест как« Moo », полностью игнорируя массив. Я знаю, что могу обойти это, сделав
$tpl->test = array("Test","Test","Moo");
echo($tpl->test[2]);
, но я хотел бы иметь возможность использовать его, как если бы это была естественная переменная. Это возможно?
Вы можете использовать переменную $ _SESSION напрямую. Во всяком случае, я не понимаю. Что такое $ tpl-> test [2] = Moo; должен делать? Является ли Moo постоянной? Если это строка, ей не хватает кавычек. – Artefacto
В чем смысл? $ _SESSION уже является переменной ... – nico
@nico Говоря о будущем, это отлично подходит для таких вещей, как инъекция зависимостей и просто абстракция. Некоторые люди могут предпочесть использовать Session как объект или синглтон. – Navarr