我可以将非静态对象放在静态属性中吗?

时间:2013-11-07 14:38:08

标签: php oop symfony

我可以这样做吗?

class A {
    public function foo() { echo "whatever";}
}
class B {
    static public $var;
    static function initVar($var) { self::$var = $var; }
    static public function bar() { return self::$var->foo(); }
}
class C {
    public function baz() {
        $a = new A();
        B::initVar($a);
        echo B::bar(); // should print "whatever"
    }
}

如果没有,是否有任何方法可以通过静态方法访问给定的对象实例?

1 个答案:

答案 0 :(得分:1)

是的,你可以。这通常是如何实现Singleton(一个对象应该只被实例化一次的模式)。虽然这种模式被认为是糟糕的......

http://en.wikipedia.org/wiki/Singleton_pattern

示例(虽然在同一个班级......):     

class A
{
   private static $inst;
   public static function instance()
   {
        if (self::$inst === NULL)
        {
            self::$inst = new A();
        }
        return self::$inst;
   }
   /* constructor etc */
}

$a = A::instance();
$a->someMethod();

?>