Магические методы в статических объектах - PullRequest
4 голосов
/ 15 декабря 2011

Я пытаюсь достичь этого.У меня есть класс менеджера сеансов, это то, что я разработал для моей платформы.Мне нужно иметь уникальные сеансовые ключи, поэтому вместо того, чтобы делать что-то вроде этого:

$_SESSION['foo'] = $bar;

, я делаю это:

Session::set('foo',$bar);

и функция set будет делать что-то вроде этого:*

$_SESSION[$unique.'foo'] = $bar;

Это хорошо, это работает, но я хотел бы использовать это так:

Session['foo'] = $bar

или вот так:

Session->foo = $bar

Я обнаружил, что не могуиспользуйте -> в статических объектах, и я также не могу использовать магические функции, такие как __set и __get.Итак, есть ли способ, как я могу добиться этого поведения?

Ответы [ 2 ]

3 голосов
/ 15 декабря 2011

Сделать сессионный класс синглтоном?

class Session
{
   public static $instance;

   public static function init()
   {
        self::$instance = new Session();
   }    

    public function __get($key)
    {
        return $_SESSION[$key];
    }
}

А затем используйте его так:

echo(Session::$instance->foo);
0 голосов
/ 15 декабря 2011

Вы должны использовать __call, тогда

http://php.net/manual/en/language.oop5.overloading.php

Но Session['foo'] = $bar невозможно использовать.

...