【问题标题】:Magic methods in static objects静态对象中的魔术方法
【发布时间】:2012-01-21 05:33:06
【问题描述】:

我正在努力实现这一目标。我有会话管理器类,它是我为我的框架开发的。我需要有唯一的会话密钥,所以不要这样做:

$_SESSION['foo'] = $bar;

我这样做:

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

set 函数会做这样的事情:

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

它很好,它可以工作,但我想这样使用它:

Session['foo'] = $bar

或者像这样:

Session->foo = $bar

我发现我不能在静态对象中使用->,我也不能使用像__set和__get这样的魔术函数。那么,有什么办法可以实现这种行为?

【问题讨论】:

    标签: php oop session static-methods


    【解决方案1】:

    让你的会话类成为单例?

    class Session
    {
       public static $instance;
    
       public static function init()
       {
            self::$instance = new Session();
       }    
    
        public function __get($key)
        {
            return $_SESSION[$key];
        }
    }
    

    然后像这样使用它:

    echo(Session::$instance->foo);
    

    【讨论】:

    • 谢谢伙计,这对我有帮助:)
    【解决方案2】:

    你必须使用 __call 然后

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

    但是Session['foo'] = $bar是无法使用的。

    【讨论】:

    • "属性重载只适用于对象上下文。这些神奇的方法不会在静态上下文中触发。"
    • 你有没有机会提到__callStatic?
    • @Hasan Khan 哎呀,我的错。然后他必须像你之前所说的那样使用单例。
    猜你喜欢
    • 1970-01-01
    • 2015-01-04
    • 2018-05-19
    • 2013-03-03
    • 2013-12-17
    • 1970-01-01
    • 2015-08-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多