0

我可以这样做吗?

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"
    }
}

如果没有,有什么办法可以通过静态方法访问给定的对象实例?

4

1 回答 1

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();

?>
于 2013-11-07T14:44:05.053 回答